MediaTrack
Ses akışı, video akışı veya metin olabilecek bir medya parçasını temsil eder
(ör. altyazılar). Uygulamanız gruplandırabilir, biçimlendirebilir ve etkinleştirebilir
medya parçaları.
Kanal yapılandırma
Bir kanalı yapılandırabilir ve ona benzersiz bir kimlik atayabilirsiniz. Aşağıdaki kod İngilizce bir metin parçası, bir Fransızca metin parçası ve bir Fransızca ses parçası oluşturur, her biri kendi kimliğine sahip:
val englishSubtitle = MediaTrack.Builder(1 /* ID */, MediaTrack.TYPE_TEXT) .setName("English Subtitle") .setSubtype(MediaTrack.SUBTYPE_SUBTITLES) .setContentId("https://some-url/caption_en.vtt") /* language is required for subtitle type but optional otherwise */ .setLanguage("en-US") .build() val frenchSubtitle = MediaTrack.Builder(2, MediaTrack.TYPE_TEXT) .setName("French Subtitle") .setSubtype(MediaTrack.SUBTYPE_SUBTITLES) .setContentId("https://some-url/caption_fr.vtt") .setLanguage("fr") .build() val frenchAudio = MediaTrack.Builder(3, MediaTrack.TYPE_AUDIO) .setName("French Audio") .setContentId("trk0001") .setLanguage("fr") .build()
MediaTrack englishSubtitle = new MediaTrack.Builder(1 /* ID */, MediaTrack.TYPE_TEXT) .setName("English Subtitle") .setSubtype(MediaTrack.SUBTYPE_SUBTITLES) .setContentId("https://some-url/caption_en.vtt") /* language is required for subtitle type but optional otherwise */ .setLanguage("en-US") .build(); MediaTrack frenchSubtitle = new MediaTrack.Builder(2, MediaTrack.TYPE_TEXT) .setName("French Subtitle") .setSubtype(MediaTrack.SUBTYPE_SUBTITLES) .setContentId("https://some-url/caption_fr.vtt") .setLanguage("fr") .build(); MediaTrack frenchAudio = new MediaTrack.Builder(3, MediaTrack.TYPE_AUDIO) .setName("French Audio") .setContentId("trk0001") .setLanguage("fr") .build();
Parçaları gruplandır
Birden fazla parçayı, medya öğesi olarak gruplandırabilirsiniz. Bu öğe,
MediaInfo
.
MediaInfo
örneği
bir dizi parçayı alır ve medya öğesiyle ilgili diğer bilgileri toplar.
Örneği temel alarak, uygulamanız bu üç medya kanalını bir medyaya
ve bu üç parçanın bir listesini
MediaInfo.Builder.setMediaTracks(List)
.
Uygulamanızın yüklenmeden önce MediaInfo
ile kanalları bu şekilde ilişkilendirmesi gerekiyor
medyayı alıcıya ulaştırmak istiyorum.
val tracks: MutableList<MediaTrack> = ArrayList<MediaTrack>() tracks.add(englishSubtitle) tracks.add(frenchSubtitle) tracks.add(frenchAudio) val mediaInfo = MediaInfo.Builder(url) .setStreamType(MediaInfo.STREAM_TYPE_BUFFERED) .setContentType(getContentType()) .setMetadata(getMetadata()) .setMediaTracks(tracks) .build()
List tracks = new ArrayList(); tracks.add(englishSubtitle); tracks.add(frenchSubtitle); tracks.add(frenchAudio); MediaInfo mediaInfo = MediaInfo.Builder(url) .setStreamType(MediaInfo.STREAM_TYPE_BUFFERED) .setContentType(getContentType()) .setMetadata(getMetadata()) .setMediaTracks(tracks) .build();
Kanalları kaldır
Mevcut medyadaki tüm parçaları kaldırmak için (örneğin, üçünü
altyazı varsa)
MediaInfo.Builder.setMediaTracks(List)
ve boş bir kimlik listesi iletin.
Parçaları güncelleme
Uygulamanız medyayla ilişkilendirilmiş bir veya daha fazla kanalı etkinleştirebilir
öğesine (medya yüklendikten sonra)
RemoteMediaClient.setActiveMediaTracks(long[])
etkinleştirilecek parçaların kimliklerini aktarmalıdır. Bu örnek, şu özelliği etkinleştirir:
Fransızca altyazı ve Fransızca ses:
// the ID for the French subtitle is '2' and for the French audio '3' remoteMediaClient.setActiveMediaTracks(longArrayOf(2, 3)) .setResultCallback(ResultCallback { mediaChannelResult: RemoteMediaClient.MediaChannelResult -> if (!mediaChannelResult.status.isSuccess) { Log.e(TAG, "Failed with status code:" + mediaChannelResult.status.statusCode ) } })
// the ID for the French subtitle is '2' and for the French audio '3' remoteMediaClient.setActiveMediaTracks(new long[]{2, 3}) .setResultCallback(mediaChannelResult -> { if (!mediaChannelResult.getStatus().isSuccess()) { Log.e(TAG, "Failed with status code:" + mediaChannelResult.getStatus().getStatusCode()); } });
Metin parçalarının stilini ayarlama
TextTrackStyle
bir metin parçasının stil bilgilerini içerir. Oluşturduktan veya güncelledikten sonra
mevcut bir TextTrackStyle'ı seçerseniz bu stili
çağırarak medya öğesi
RemoteMediaClient.setTextTrackStyle
aşağıdaki gibidir:
// the ID for the French subtitle is '2' and for the French audio '3' remoteMediaClient.setTextTrackStyle(style) .setResultCallback(ResultCallback { mediaChannelResult: RemoteMediaClient.MediaChannelResult -> if (!mediaChannelResult.status.isSuccess) { Log.e(TAG, "Failed to set the style, status code: " + mediaChannelResult.status.statusCode ) } })
remoteMediaClient.setTextTrackStyle(style) .setResultCallback(mediaChannelResult -> { if (!mediaChannelResult.getStatus().isSuccess()) { Log.e(TAG, "Failed to set the style, status code: " + mediaChannelResult.getStatus().getStatusCode()); } });
Uygulamanız, kullanıcıların sistem veya uygulamanın kendisi tarafından sağlanan ayarlar Android KitKat'ta ve sonrası alt yazılar için Yönetici tarafından sağlanan sistem genelinde altyazı ayarlarını çerçeve:
val textTrackStyle = TextTrackStyle.fromSystemSettings(context)
TextTrackStyle textTrackStyle = TextTrackStyle.fromSystemSettings(context);
KitKat'tan önceki sürümler için yukarıdaki çağrı, alanları tanımlanmamış olduğundan, bu alanları kontrol etmek için kullanıcı seçimlerine ve bazı varsayılan değerlere göre değişir. Aşağıdaki metni biçimlendirebilirsiniz stil öğelerini izleyin:
- Ön plan (metin) rengi ve opaklığı
- Arka plan rengi ve şeffaflık
- Kenar türü
- Kenar Rengi
- Yazı Tipi Ölçeklendirme
- Yazı Tipi Ailesi
- Yazı Tipi Stili
Örneğin, metin rengini aşağıdaki gibi% 50 opaklık (80) ile kırmızı (FF) olarak ayarlayın:
textTrackStyle.foregroundColor = Color.parseColor("#80FF0000")
textTrackStyle.setForegroundColor(Color.parseColor("#80FF0000"));
KitKat ve sonraki sürümlerde, bilgilendirilmek için uygulamanızı kaydetmeniz gerekir
Altyazı ayarları güncellendiğinde. Bu amaca ulaşmak için
uygulamak
CaptioningManager.CaptioningChangeListener
ve şunu arayarak bu dinleyiciyi kaydedin:
CaptioningManager.addCaptioningChangeListener(yourChangeListener)
CaptioningManager.addCaptioningChangeListener(yourChangeListener);
Uygulamanız altyazı ayarlarının değiştirildiğine dair bir geri arama aldığında
yeni ayarları çıkarması ve metin stilinin
şu anda oynatılan medyanın altyazısı
RemoteMediaClient.setTextTrackStyle
geçiyorum.
Durum güncellemelerini alın
Aynı alıcıya birden fazla gönderici bağlı olduğunda aşağıdakiler önemlidir: alıcıdaki değişikliklerden haberdar olmasını sağlamak için diğer gönderenlerden başlatıldı.
Bu doğrultuda, uygulamanız
RemoteMediaClient.Listener
ve
RemoteMediaClient.ProgressListener
.
Öğe
TextTrackStyle
tüm bağlı gönderenlere bildirim gönderilir.
her ikisi aracılığıyla edinilebilir. Bu durumda alıcı SDK
yeni stilin öncekinden farklı olup olmadığını doğrulamaz ve
tüm bağlı gönderenlere bildirim gönderir. Ancak,
etkin kanal değişiklikleri, yalnızca RemoteMediaClient.ProgressListener
bağlı gönderenlere bildirim gönderilir.
CORS şartlarını karşılama
Google Cast, uyarlanabilir medya akışı için CORS üstbilgileri, hatta basit bir mp4 dosyası bile Parça içeren medya akışları için CORS Parçalar özelliğini etkinleştirmek istiyorsanız izin istiyorsanız hem parça akışlarınız hem de medyanız için CORS'yi etkinleştirmeniz gerekir akışlar. Bu nedenle, basit mp4 medyanız için CORS başlıkları yoksa, basit bir altyazı parçası eklerseniz medyanızı akış şeklinde aktarmanızı sağlar. Bunun için sunucunuzu uygun CORS başlığı. Ayrıca, en azından aşağıdaki başlıklara izin vermeniz gerekir: Content-Type, Accept-Encoding ve Range. Son iki başlığın daha önce ihtiyaç duymadığınız ek başlıklar kullanabilirsiniz.