از آهنگ های رسانه ای استفاده کنید

MediaTrack یک آهنگ رسانه ای را نشان می دهد که می تواند یک جریان صوتی، یک جریان ویدئو یا متن (مانند زیرنویس یا زیرنویس) باشد. برنامه شما می تواند آهنگ های رسانه را گروه بندی، سبک و فعال کند.

یک آهنگ را پیکربندی کنید

می توانید یک آهنگ را پیکربندی کنید و یک شناسه منحصر به فرد به آن اختصاص دهید. کد زیر یک تراک متن انگلیسی، یک تراک متنی فرانسوی و یک آهنگ صوتی فرانسوی ایجاد می کند که هر کدام دارای شناسه خاص خود هستند:

کاتلین
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();

آهنگ های گروهی

می‌توانید چندین آهنگ را در یک آیتم رسانه گروه‌بندی کنید که توسط MediaInfo نشان داده می‌شود. نمونه‌ای از MediaInfo مجموعه‌ای از آهنگ‌ها را می‌گیرد و سایر اطلاعات را درباره آیتم رسانه جمع‌آوری می‌کند. بر اساس مثال، برنامه شما می‌تواند با ارسال فهرستی از آن سه آهنگ به MediaInfo.Builder.setMediaTracks(List) آن سه آهنگ رسانه را به یک آیتم رسانه اضافه کند. برنامه شما باید قبل از بارگیری رسانه در گیرنده، آهنگ‌های MediaInfo را به این روش مرتبط کند.

کاتلین
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();

حذف آهنگ ها

برای حذف تمام آهنگ ها از رسانه فعلی (مانند خاموش کردن سه زیرنویس در مثال)، MediaInfo.Builder.setMediaTracks(List) را فراخوانی کنید و یک لیست خالی از شناسه ها را ارسال کنید.

آهنگ ها را به روز کنید

برنامه شما می‌تواند با تماس RemoteMediaClient.setActiveMediaTracks(long[]) یک یا چند آهنگ مرتبط با آیتم رسانه (پس از بارگیری رسانه) و ارسال شناسه‌های آهنگ‌هایی که قرار است فعال شوند، فعال کند. این مثال زیرنویس فرانسوی و صدای فرانسوی را فعال می کند:

کاتلین
// 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());
        }
    });

سبک آهنگ های متنی

TextTrackStyle اطلاعات استایل یک آهنگ متنی را در بر می گیرد. پس از ایجاد یا به‌روزرسانی یک TextTrackStyle موجود، می‌توانید با فراخوانی RemoteMediaClient.setTextTrackStyle ، آن سبک را روی آیتم رسانه‌ای در حال پخش اعمال کنید:

کاتلین
// 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());
        }
    });

برنامه شما باید به کاربران اجازه دهد تا سبک آهنگ های متنی را با استفاده از تنظیمات ارائه شده توسط سیستم یا خود برنامه به روز کنند. در Android KitKat و نسخه‌های جدیدتر ، می‌توانید از تنظیمات زیرنویس در سراسر سیستم که توسط چارچوب ارائه شده است استفاده کنید:

کاتلین
val textTrackStyle = TextTrackStyle.fromSystemSettings(context)
جاوا
TextTrackStyle textTrackStyle = TextTrackStyle.fromSystemSettings(context);

برای نسخه‌های قبل از KitKat ، فراخوانی بالا یک شی را برمی‌گرداند که فیلدهای آن تعریف نشده است، بنابراین باید آن فیلدها را بر اساس انتخاب‌های کاربر و برخی مقادیر پیش‌فرض در برنامه خود پر کنید. می توانید عناصر سبک آهنگ متن زیر را استایل دهید:

  • رنگ و تیرگی پیش زمینه (متن).
  • رنگ پس زمینه و شفافیت
  • نوع لبه
  • رنگ لبه
  • مقیاس قلم
  • خانواده فونت
  • سبک قلم

به عنوان مثال، رنگ متن را قرمز (FF) با کدورت 50٪ (80) به صورت زیر تنظیم کنید:

کاتلین
textTrackStyle.foregroundColor = Color.parseColor("#80FF0000")
جاوا
textTrackStyle.setForegroundColor(Color.parseColor("#80FF0000"));

در KitKat و نسخه‌های بعدی ، باید برنامه خود را ثبت کنید تا در صورت به‌روزرسانی تنظیمات زیرنویس در سراسر سیستم، مطلع شوید. برای این منظور، باید CaptioningManager.CaptioningChangeListener در برنامه خود پیاده سازی کنید و با تماس این شنونده را ثبت کنید:

کاتلین
CaptioningManager.addCaptioningChangeListener(yourChangeListener)
جاوا
CaptioningManager.addCaptioningChangeListener(yourChangeListener);

هنگامی که برنامه شما پاسخی دریافت می‌کند که تنظیمات زیرنویس تغییر کرده‌اند، باید تنظیمات جدید را استخراج کنید و با تماس با RemoteMediaClient.setTextTrackStyle و ارسال سبک جدید، سبک عنوان متن را برای رسانه‌ای که در حال پخش است، به‌روزرسانی کنید.

به روز رسانی وضعیت را دریافت کنید

هنگامی که چندین فرستنده به یک گیرنده متصل هستند، برای هر فرستنده مهم است که از تغییرات گیرنده آگاه باشد حتی اگر این تغییرات از فرستنده های دیگر آغاز شده باشد.

برای این منظور، برنامه شما باید یک RemoteMediaClient.Listener و یک RemoteMediaClient.ProgressListener ثبت کند.

اگر TextTrackStyle رسانه فعلی تغییر کند، آنگاه به همه فرستنده‌های متصل از طریق هر دو شنونده ثبت‌شده فوق اطلاع داده می‌شود. در این حالت، SDK گیرنده بررسی نمی‌کند که آیا سبک جدید با سبک قبلی متفاوت است یا خیر و بدون توجه به آن، به همه فرستنده‌های متصل اطلاع می‌دهد. با این حال، اگر وضعیت آهنگ‌های فعال تغییر کند، فقط RemoteMediaClient.ProgressListener در فرستنده‌های متصل مطلع خواهد شد.

الزامات CORS را برآورده کنید

برای پخش جریانی رسانه تطبیقی، Google Cast به وجود سرصفحه‌های CORS نیاز دارد، اما حتی جریان‌های رسانه mp4 ساده نیز اگر شامل Tracks باشند، به CORS نیاز دارند. اگر می‌خواهید آهنگ‌ها را برای هر رسانه‌ای فعال کنید، باید CORS را هم برای جریان‌های آهنگ و هم برای پخش‌های رسانه‌ای فعال کنید. بنابراین، اگر هدرهای CORS را برای رسانه mp4 ساده خود روی سرور خود ندارید، و سپس یک آهنگ زیرنویس ساده اضافه می‌کنید، نمی‌توانید رسانه خود را پخش کنید، مگر اینکه سرور خود را به‌روزرسانی کنید تا هدر CORS مناسب را درج کند. علاوه بر این، باید حداقل هدرهای زیر را مجاز کنید: Content-Type، Accept-Encoding و Range. توجه داشته باشید که دو هدر آخر سرصفحه های اضافی هستند که ممکن است قبلاً به آنها نیاز نداشته باشید.