HMS Video Kit Nedir? Ne işe yarar? Nasıl kullanılır?

Eyüp Kaan AKAY
Huawei Developers - Türkiye
4 min readOct 15, 2020

Herkese selam,

Bu makalede, size Huawei’in geliştirmiş olduğu HMS Video Kit’in özelliklerini ve bir video adresinden medyayı oynatmanıza izin veren örnek bir demo uygulamayı anlatacağım. Bunları yaparken de codelab’de yer alan Video Kit Demo uygulamasını inceleyeceğiz.

Giriş:

Video Kit Nedir?

Video kit, Huawei tarafından sunulan, uygulamalarda video oynatmayı kolaylaştıran bir SDK.

Son sürümü: 1.0.1.300

Kullanılabilen cihazlar: HMS Core 5.0.0.300 veya üzeri, EMUI 3.0 veya üzeri olan Huawei Telefon veya Tablet

Neden Kullanmalıyız?

Son dönemlerde artan medya akışı, sosyal medya, mesajlaşma ve video / dizi / film uygulamaları ve bu özellikleri kullanan uygulamalar yaygınlaşmış ve çoğalmış durumda. Bu da doğal olarak uygulamalara entegre edilen video player’ları ve videoları da artırmış durumda. İşte tam olarak burada, hızlı entegrasyonu, kolay kullanımı ve bol özellikleri sayesinde karşımıza Video Kit çıkıyor.

Özellikleri:

Kullanılabilir olanlar:

- Çeşitli video ve ses formatlarını destekliyor: MP4, M3U8, MPD, 3GP, TS, MP3, AAC.

- Çeşitli protokoller: HTTP/S, HLS ve DASH (HLS ve DASH, canlı yayın gibi sürekli yayın yapan videoların UDP yerine HTTP üzerinden aktarılmasını sağlayan protokoller)

- Yüksek playback kontrolü. Başlatma / durdurma, videoda herhangi bir ana gitme, ses kontrolü, farklı hızlarda oynatma, tam ekran modu, yer imleri…

Gelmesi planlanan özellikler:

- Videoları düzenleme özelliği, bu özellik sayesinde videoları kesme, filtre ekleme, vb. özellikleri rahatça kullanabileceğiz.

Kullanılabilen ülkeler:

Video Kit’in kullanılabildiği ülkeler

Hazırlıklar:

İlk önce, neredeyse bütün Huawei mobil servislerinde ve Video Kit’te de olduğu gibi HMS Core’u uygulamanıza entegre etmeniz gerekmektedir.

Gerekenler:

· Android Studio 3.X

· JDK 1.8 veya sonrası

· HMS Core 5.0.0.300 veya sonrası

· EMUI 3.0 veya sonrası

Burada entegrasyonun akış şemasını görüyorsunuz:

Buraya tıklayarak HMS Core’u projenize nasıl entegre edebileceğinizi görebilirsiniz. Video Kit’in olmazsa olmazı uygulama imzasının girilmesidir. Ayrıca Video Kit “Manage APIS” kısmında bulunmadığı için o kısımda herhangi bir iş yapılmayacaktır.

SDK bağımlılıklarını ekleme:

Proje seviyesindeki build.gradle dosyasına eklenecekler:

Uygulama seviyesindeki build.gradle dosyasına eklenecekler:

apply plugin: ‘com.huawei.agconnect’

AndroidManifest.xml dosyasına eklenmesi gereken izinler de şu şekilde:

Son olarak, proguard-rules.pro dosyasında yapılacak değişiklikler:

Geliştirme:

İlk önce uygulamamız için kendi Application sınıfımızı yazmamız gerekiyor. Elbette bunu manifest dosyasındaki application name özelliğini bizim sınıfımızın ismi ile set etmemiz gerekiyor:

Application sınıfımızın içi de bu şekilde:

Burada, Video Kit’in playerı olan WisePlayer nesnesini oluşturup set ediyoruz. Bunu yapmadan önce factoryOptions nesnesi oluşturup WisePlayerFactory’mizi başlatıyoruz. Ardından bir callback ekleyerek callback sonucu başarılı olduğu zaman wisePlayerFactory nesnemizi set ediyoruz.

Şimdi controller sınıfımızı yazıyoruz:

Sınıfımızın yapıcı metodu:

Burada bazı nesnelerimiz var, örneğin “onWisePlayerListener” wiseplayer ile alakalı durumları controller sınıfımızdan çağırmamızı sağlayan nesne. Yukarıdaki kodlara ek olarak Controller sınıfımızda başka metodlar da bulunmakta, bunlardan bazıları: setCurrentPlayData, ready, start, getCurrentTime, getDuration, updateCurrentProgress, setSurfaceView, setTextureView, suspend, release, stop, setPlayData, setPlaySpeed, setMute, setVolume, reset, onPause…

Bu metodların genel olarak ne yaptıkları zaten isimlerinden anlaşılmakta, fakat pause ile onPause arasındaki farka değinmek istiyorum. O da şu, pause wiseplayer’ın override metodu, onPause ise activity’nin onPause override metodu. Activity’de onPause tetiklendiği zaman buradaki onPause tetikleniyor.

Sıra geldi activity’ye, PlayActivity.java:

Burada, uygulamamıza girdik, “xxx” adresindeki videoyu aç diye adresi verdik ve video activity’sine geçtik. İlk önce view nesnelerini oluşturmak ve kontrol etmek amaçlı PlayView adında oluşturulmuş olan sınıfı kullanarak nesnelerimizi alıyoruz. Bu aslında çok da şart olan bir şey değil fakat bütün ekrandaki nesnelere tek bir nesne üzerinden ulaşmak için gerçekten iyi bir yöntem. setContentView metodumuz da göreceğiniz üzere playView nesnesi üzerinden çağrılıyor. Aslında playView nesnesini oluşturduktan hemen sonra kullanmaya başlayabiliyoruz.

Activity tanımı “public class PlayActivity extends AppCompatActivity implements OnPlayWindowListener, OnWisePlayerListener {}” bu şekilde olduğu için bazı durum metodlarını override etmemiz gerekiyor. Bunlar da onError, onEvent, onResolutionUpdated, onReady, onLoadingUpdate, onPlayEnd, onSeekEnd, onStartPlaying metodları.

Aslında işlerin tamamı bu kadar. Şimdi sıra biraz süslemede.

Bu metod, video oynatılan acitivity’yi başlatacağımız metod fakat activity sınıfında yazıyoruz bunu da.

Bu metodda videomuz gösterilmeye hazır olduğu zaman bu metod çağrılıyor ve video gösterilmeye başlanması için işlemler yapılıyor ve sonunda override onReady metodu çağrılıyor.

onReady metodunda artık videonun cihaz tarafındaki bütün işlemleri bitmiş, sadece internet üzerinden çekilip, çalışmaya hazır hale getiriliyor.

İşlemler burada son buluyor.

Gelin biraz da veri modelimize bakalım. Model sınıfımız PlayEntity sınıfı, Serializable implement ediliyor.

Ve elbette bu nesnelerin getter ve setter metodları var. Eğer kotlin ile yazıyorsanız, PlayEntity sınıfını “data class” olarak yazabilirsiniz. O da şu şekilde olacaktır:

Burada bulunan “name” nesnesi video adını, “urlType” nesnesi videonun http, json file veya farklı formatlarda olduğunu göstermektedir, varsayılan olarak kullanılan 0 değeri bir http video olduğunu gösterir, “url” videonun adresini belirtir, “appId” uygulamanın idsini belirtiyor.

Verimiz, getIntentExtra metodumuz ile activity’mize gönderilmektedir.

ready metodunda ise bu metod çağrılıp veri control nesnesinin setCurrentPlayData metodu ile wiseplayer’ımıza set ediliyor.

Bu adımda artık verimiz set edilmiş, kullanıma hazır hale getirilmiştir. Artık programlama kısmında her şeyimiz hazır.

Sırada layout var:

Video Player

Basit bir video layout tasarımı bu şekilde oluyor. Play/pause butonu, videonun hangi anda olduğunu gösteren ve istediğimiz ana gidebilmeyi sağlayan progressbar, videonun oynatım hızını gösteren ve ayarlamamızı sağlayan text, videonun tam ekran olmasını sağlayan buton ve en son olarak wiseplayer’a ait bir view olan SurfaceView.

Hepsinin üzerine tıklanma durumunda iştleme geçen override metodlarını nerede yazdığımızı daha önce göstermiştim. Artık gerisi sizin elinizde.

Bol kahveli, iyi kodlamalar…

--

--

Eyüp Kaan AKAY
Huawei Developers - Türkiye

Software Engineer, Working on mobile and web development #web3