Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Artikel ini memperlihatkan kepada Anda cara membuat, menjadwalkan, dan mengelola hentian media ke aplikasi pemutaran media Anda. Jeda media biasanya digunakan untuk menyisipkan iklan audio atau video ke dalam konten media. Dimulai dengan Windows 10, versi 1607, Anda dapat menggunakan kelas MediaBreakManager untuk menambahkan jeda media dengan cepat dan mudah ke MediaPlaybackItem apa pun yang Anda mainkan dengan MediaPlayer.
Setelah Anda menjadwalkan satu atau beberapa jeda media, sistem akan otomatis memutar konten media Anda pada waktu yang ditentukan selama pemutaran. MediaBreakManager menyediakan peristiwa sehingga aplikasi Anda dapat bereaksi saat media berhenti dimulai, berakhir, atau saat dilewati oleh pengguna. Anda juga dapat mengakses MediaPlaybackSession untuk jeda media Anda untuk memantau peristiwa seperti pembaruan kemajuan unduhan dan buffering.
Jadwalkan hentian media
Setiap objek MediaPlaybackItem memiliki MediaBreakSchedule sendiri yang Anda gunakan untuk mengonfigurasi jeda media yang akan diputar saat item diputar. Langkah pertama untuk menggunakan hentian media di aplikasi Anda adalah membuat MediaPlaybackItem untuk konten pemutaran utama Anda.
MediaPlaybackItem moviePlaybackItem =
new MediaPlaybackItem(MediaSource.CreateFromUri(new Uri("http://www.fabrikam.com/movie.mkv")));
Untuk informasi selengkapnya tentang bekerja dengan MediaPlaybackItem, MediaPlaybackList, dan API pemutaran media mendasar lainnya, lihat Item media, daftar putar, dan trek.
Contoh berikutnya menunjukkan cara menambahkan hentian pra-pendaftaran ke MediaPlaybackItem, yang berarti bahwa sistem akan memutar hentian media sebelum memutar item pemutaran tempat jeda berada. Pertama objek MediaBreak baru dibuat. Dalam contoh ini, konstruktor dipanggil dengan MediaBreakInsertionMethod.Interrupt, yang berarti bahwa konten utama akan dijeda saat konten jeda diputar.
Selanjutnya, MediaPlaybackItem baru dibuat untuk konten yang akan diputar selama jeda, seperti iklan. Properti CanSkip dari item pemutaran ini diatur ke false. Ini berarti bahwa pengguna tidak akan dapat melewati item menggunakan kontrol media bawaan. Aplikasi Anda masih dapat memilih untuk melewati penambahan secara terprogram dengan memanggil SkipCurrentBreak.
Properti PlaybackList media break adalah MediaPlaybackList yang memungkinkan Anda memutar beberapa item media sebagai daftar putar. Tambahkan satu atau beberapa objek MediaPlaybackItem dari kumpulan Item daftar untuk menyertakannya dalam daftar putar hentian media.
Terakhir, jadwalkan jeda media dengan menggunakan properti BreakSchedule item pemutaran konten utama. Tentukan jeda untuk menjadi hentian pra-pendaftaran dengan menetapkannya ke properti PrerollBreak dari objek jadwal.
MediaBreak preRollMediaBreak = new MediaBreak(MediaBreakInsertionMethod.Interrupt);
MediaPlaybackItem prerollAd =
new MediaPlaybackItem(MediaSource.CreateFromUri(new Uri("http://www.fabrikam.com/preroll_ad.mp4")));
prerollAd.CanSkip = false;
preRollMediaBreak.PlaybackList.Items.Add(prerollAd);
moviePlaybackItem.BreakSchedule.PrerollBreak = preRollMediaBreak;
Sekarang Anda dapat memutar kembali item media utama, dan jeda media yang Anda buat akan diputar sebelum konten utama. Buat objek MediaPlayer baru dan secara opsional atur properti AutoPlay ke true untuk memulai pemutaran secara otomatis. Atur properti Sumber MediaPlayer ke item pemutaran konten utama Anda. Ini tidak diperlukan, tetapi Anda dapat menetapkan MediaPlayer ke MediaPlayerElement untuk merender media di halaman XAML. Untuk informasi selengkapnya tentang menggunakan MediaPlayer, lihat Memutar audio dan video dengan MediaPlayer.
_mediaPlayer = new MediaPlayer();
_mediaPlayer.AutoPlay = true;
_mediaPlayer.Source = moviePlaybackItem;
mediaPlayerElement.SetMediaPlayer(_mediaPlayer);
Tambahkan jeda postroll yang diputar setelah MediaPlaybackItem yang berisi konten utama Anda selesai diputar, dengan menggunakan teknik yang sama dengan jeda pra-pendaftaran, kecuali Anda menetapkan objek MediaBreak anda ke properti PostrollBreak.
MediaBreak postrollMediaBreak = new MediaBreak(MediaBreakInsertionMethod.Interrupt);
MediaPlaybackItem postRollAd =
new MediaPlaybackItem(MediaSource.CreateFromUri(new Uri("http://www.fabrikam.com/postroll_ad.mp4")));
postrollMediaBreak.PlaybackList.Items.Add(postRollAd);
moviePlaybackItem.BreakSchedule.PostrollBreak = postrollMediaBreak;
Anda juga dapat menjadwalkan satu atau beberapa jeda midroll yang diputar pada waktu tertentu dalam pemutaran konten utama. Dalam contoh berikut, MediaBreak dibuat dengan kelebihan beban konstruktor yang menerima objek TimeSpan, yang menentukan waktu dalam pemutaran item media utama saat jeda akan diputar. Sekali lagi, MediaBreakInsertionMethod.Interrupt ditentukan untuk menunjukkan bahwa pemutaran konten utama akan dijeda saat jeda diputar. Jeda midroll ditambahkan ke jadwal dengan memanggil InsertMidrollBreak. Anda bisa mendapatkan daftar baca-saja dari jeda midroll saat ini dalam jadwal dengan mengakses properti MidrollBreaks.
MediaBreak midrollMediaBreak = new MediaBreak(MediaBreakInsertionMethod.Interrupt, TimeSpan.FromMinutes(10));
midrollMediaBreak.PlaybackList.Items.Add(
new MediaPlaybackItem(MediaSource.CreateFromUri(new Uri("http://www.fabrikam.com/midroll_ad_1.mp4"))));
midrollMediaBreak.PlaybackList.Items.Add(
new MediaPlaybackItem(MediaSource.CreateFromUri(new Uri("http://www.fabrikam.com/midroll_ad_2.mp4"))));
moviePlaybackItem.BreakSchedule.InsertMidrollBreak(midrollMediaBreak);
Contoh jeda midroll berikutnya yang ditampilkan menggunakan metode penyisipan MediaBreakInsertionMethod.Replace , yang berarti bahwa sistem akan terus memproses konten utama saat jeda diputar. Opsi ini biasanya digunakan oleh aplikasi media streaming langsung di mana Anda tidak ingin konten dijeda dan berada di belakang streaming langsung saat iklan diputar.
Contoh ini juga menggunakan kelebihan beban konstruktor MediaPlaybackItem yang menerima dua parameter TimeSpan. Parameter pertama menentukan titik awal dalam item pemisah media tempat pemutaran akan dimulai. Parameter kedua menentukan durasi di mana item pemisah media akan diputar. Jadi, dalam contoh berikut, MediaBreak akan mulai diputar pada 20 menit ke dalam konten utama. Ketika diputar, item media akan dimulai 30 detik dari awal item media jeda dan akan diputar selama 15 detik sebelum konten media utama dilanjutkan diputar.
midrollMediaBreak = new MediaBreak(MediaBreakInsertionMethod.Replace, TimeSpan.FromMinutes(20));
MediaPlaybackItem ad =
new MediaPlaybackItem(MediaSource.CreateFromUri(new Uri("http://www.fabrikam.com/midroll_ad_3.mp4")),
TimeSpan.FromSeconds(30),
TimeSpan.FromSeconds(15));
ad.CanSkip = false;
midrollMediaBreak.PlaybackList.Items.Add(ad);
Lewati hentian media
Seperti disebutkan sebelumnya dalam artikel ini, properti CanSkip dari MediaPlaybackItem dapat diatur untuk mencegah pengguna melewati konten dengan kontrol bawaan. Namun, Anda dapat memanggil SkipCurrentBreak dari kode Anda kapan saja untuk melewati jeda saat ini.
private void SkipButton_Click(object sender, RoutedEventArgs e) => _mediaPlayer.BreakManager.SkipCurrentBreak();
Menangani peristiwa MediaBreak
Ada beberapa peristiwa yang terkait dengan jeda media yang dapat Anda daftarkan untuk mengambil tindakan berdasarkan status jeda media yang berubah.
_mediaPlayer.BreakManager.BreakStarted += BreakManager_BreakStarted;
_mediaPlayer.BreakManager.BreakEnded += BreakManager_BreakEnded;
_mediaPlayer.BreakManager.BreakSkipped += BreakManager_BreakSkipped;
_mediaPlayer.BreakManager.BreaksSeekedOver += BreakManager_BreaksSeekedOver;
BreakStarted dimunculkan ketika media berhenti dimulai. Anda mungkin ingin memperbarui UI Anda untuk memberi tahu pengguna bahwa konten pemutus media sedang diputar. Contoh ini menggunakan MediaBreakStartedEventArgs yang diteruskan ke handler untuk mendapatkan referensi ke hentian media yang dimulai. Kemudian properti CurrentItemIndex digunakan untuk menentukan item media mana dalam daftar putar jeda media yang sedang diputar. Kemudian UI diperbarui untuk menampilkan indeks iklan saat ini kepada pengguna dan jumlah iklan yang tersisa di jeda. Ingat bahwa pembaruan pada UI harus dilakukan pada utas UI, sehingga panggilan harus dilakukan di dalam panggilan ke RunAsync.
private async void BreakManager_BreakStarted(MediaBreakManager sender, MediaBreakStartedEventArgs args)
{
MediaBreak currentBreak = sender.CurrentBreak;
var currentIndex = currentBreak.PlaybackList.CurrentItemIndex;
var itemCount = currentBreak.PlaybackList.Items.Count;
await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
statusTextBlock.Text = $"Playing ad {currentIndex + 1} of {itemCount}");
}
BreakEnded dinaikkan ketika semua item media di jeda selesai diputar atau telah dilewati. Anda dapat menggunakan handler untuk kejadian ini untuk memperbarui UI untuk menunjukkan bahwa konten pemutus media tidak lagi diputar.
private async void BreakManager_BreakEnded(MediaBreakManager sender, MediaBreakEndedEventArgs args)
{
// Update UI to show that the MediaBreak is no longer playing
await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () => statusTextBlock.Text = "");
args.MediaBreak.CanStart = false;
}
Peristiwa BreakSkipped dinaikkan ketika pengguna menekan tombol Berikutnya di UI bawaan selama pemutaran item yang CanSkip-nya benar, atau ketika Anda melewati jeda kode Anda dengan memanggil SkipCurrentBreak.
Contoh berikut menggunakan properti Sumber MediaPlayer untuk mendapatkan referensi ke item media untuk konten utama. Hentian media yang dilewati milik jadwal jeda item ini. Selanjutnya, kode memeriksa untuk melihat apakah jeda media yang dilewati sama dengan hentian media yang diatur ke properti PrerollBreak dari jadwal. Jika demikian, ini berarti bahwa jeda preroll adalah jeda yang dilewati, dan dalam hal ini, jeda midroll baru dibuat dan dijadwalkan untuk memutar 10 menit ke konten utama.
private async void BreakManager_BreakSkipped(MediaBreakManager sender, MediaBreakSkippedEventArgs args)
{
// Update UI to show that the MediaBreak is no longer playing
await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () => statusTextBlock.Text = "");
MediaPlaybackItem currentItem = _mediaPlayer.Source as MediaPlaybackItem;
if(!(currentItem.BreakSchedule.PrerollBreak is null)
&& currentItem.BreakSchedule.PrerollBreak == args.MediaBreak)
{
MediaBreak mediaBreak = new MediaBreak(MediaBreakInsertionMethod.Interrupt, TimeSpan.FromMinutes(10));
mediaBreak.PlaybackList.Items.Add(await GetAdPlaybackItem());
currentItem.BreakSchedule.InsertMidrollBreak(mediaBreak);
}
}
BreaksSeekedOver dinaikkan ketika posisi pemutaran item media utama melewati waktu terjadwal untuk satu atau beberapa jeda media. Contoh berikut memeriksa untuk melihat apakah lebih dari satu jeda media dicari, jika posisi pemutaran dipindahkan ke depan, dan jika dipindahkan ke depan kurang dari 10 menit. Jika demikian, jeda pertama yang dicari, diperoleh dari koleksi SeekedOverBreaks yang diekspos oleh args peristiwa, segera diputar dengan panggilan ke metode PlayBreak dari MediaPlayer.BreakManager.
private void BreakManager_BreaksSeekedOver(MediaBreakManager sender, MediaBreakSeekedOverEventArgs args)
{
if(args.SeekedOverBreaks.Count > 1
&& args.NewPosition.TotalMinutes > args.OldPosition.TotalMinutes
&& args.NewPosition.TotalMinutes - args.OldPosition.TotalMinutes < 10.0)
_mediaPlayer.BreakManager.PlayBreak(args.SeekedOverBreaks[0]);
}
Mengakses sesi pemutaran saat ini
Objek MediaPlaybackSession menggunakan kelas MediaPlayer untuk menyediakan data dan peristiwa yang terkait dengan konten media yang sedang diputar. MediaBreakManager juga memiliki MediaPlaybackSession yang dapat Anda akses untuk mendapatkan data dan peristiwa yang secara khusus terkait dengan konten pemisah media yang sedang diputar. Informasi yang bisa Anda dapatkan dari sesi pemutaran mencakup status pemutaran saat ini, diputar atau dijeda, dan posisi pemutaran saat ini dalam konten. Anda dapat menggunakan properti NaturalVideoWidth dan NaturalVideoHeight dan NaturalVideoSizeChanged untuk menyesuaikan antarmuka pengguna video Anda jika konten media break memiliki rasio aspek yang berbeda dari konten utama Anda. Anda juga dapat menerima peristiwa seperti BufferingStarted, BufferingEnded, dan DownloadProgressChanged yang dapat memberikan telemetri berharga tentang performa aplikasi Anda.
Contoh berikut mendaftarkan handler untuk peristiwa BufferingProgressChanged; di penanganan aktivitas, ini memperbarui UI untuk menampilkan kemajuan buffering saat ini.
_mediaPlayer.BreakManager.PlaybackSession.BufferingProgressChanged += PlaybackSession_BufferingProgressChanged;
private async void PlaybackSession_BufferingProgressChanged(MediaPlaybackSession sender, object args)
{
await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
bufferingProgressBar.Value = sender.BufferingProgress);
}
Topik terkait
- Pemutaran media
- Memutar audio dan video dengan MediaPlayer
- Kontrol manual Kontrol Transportasi Media Sistem