View a markdown version of this page

Video Multitrack Amazon IVS: Panduan Integrasi Perangkat Lunak Siaran - Amazon IVS

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Video Multitrack Amazon IVS: Panduan Integrasi Perangkat Lunak Siaran

Pengantar

Agar alat atau layanan perangkat lunak penyiar pihak ketiga mengklaim bahwa ia mendukung video multitrack IVS, ia harus mengikuti panduan ini dan menerapkan dua fitur yang diperlukan, konfigurasi aliran otomatis dan metrik kinerja siaran. Kami sangat merekomendasikan juga menerapkan Fitur yang Direkomendasikan.

Diagram berikut menunjukkan interaksi tingkat tinggi antara perangkat lunak siaran Anda dan Amazon IVS:

Interaksi tingkat tinggi antara perangkat lunak siaran dan Amazon IVS.

Audiens

Dokumen ini ditujukan untuk pengembang perangkat lunak yang ingin menerapkan dukungan klien untuk video multitrack untuk:

  • Perangkat lunak penyiar kreator yang dirancang untuk streaming ke Amazon IVS atau ke layanan yang menggunakan video multitrack Amazon IVS.

  • Third-party platform streaming yang menawarkan simulcast atau transcoding sisi server, dengan pengguna yang melakukan streaming ke Amazon IVS atau layanan yang menggunakan video multitrack Amazon IVS.

Terminologi

Dokumen ini menggunakan beberapa istilah secara bergantian:

  • Pengguna, pencipta, penyiar — Pengguna akhir yang menggunakan perangkat lunak siaran untuk membuat dan melakukan streaming konten asli.

  • Layanan, platform — Platform video atau layanan seperti Amazon IVS.

  • Pel anggan — Bisnis yang dapat menggunakan layanan seperti Amazon IVS untuk mendukung situs video.

Fitur yang Diperlukan: Konfigurasi Aliran Otomatis

Konfigurasi aliran otomatis membantu pengguna memulai dengan cepat dan secara otomatis meningkatkan kualitas streaming dari waktu ke waktu. Alih-alih pengguna memilih pengaturan secara manual (misalnya, bitrate, resolusi, framerate) yang disetel sekali dan jarang diubah, konfigurasi aliran otomatis mempertimbangkan pengaturan perangkat lunak saat ini, konfigurasi perangkat keras, dan dukungan platform setiap kali pengguna memulai aliran baru. Misalnya, ketika pengguna memutakhirkan pengaturan (misalnya, dengan GPU baru), menginstal driver GPU baru, atau tujuan mulai mendukung codec baru (mis., H.265/HEVC), konfigurasi aliran otomatis bereaksi dan meningkatkan kualitas aliran pengguna berikutnya.

Langsung

Saat pengguna memulai streaming, perangkat lunak Anda harus menanyakan informasi tentang pengaturan perangkat keras dan perangkat lunak pengguna, memanggil GetClientConfiguration, mengonfigurasi video scaler/encoders, dan membuka koneksi RTMP (E-RTMP) yang disempurnakan. Langkah-langkah ini dijelaskan secara lebih rinci di bawah ini.

Gunakan GetClientConfiguration

GetClientConfigurationmembutuhkan informasi tentang pengaturan perangkat keras dan perangkat lunak pengguna.

Algoritma mempertimbangkan banyak faktor untuk memberikan konfigurasi yang:

  • Mengoptimalkan untuk pengalaman pemirsa terbaik — resolusi tertinggi, framerate tertinggi, bitrate tertinggi, jumlah trek tertinggi, newest/best codec, dan pengaturan encoder video terbaik.

  • Didukung dengan aman oleh perangkat lunak pengaturan dan siaran streamer, batas yang dikonfigurasi oleh pengguna, dan layanan tujuan.

Di dunia nyata, keterbatasan termasuk GPU yang lebih tua, jaringan mil pertama yang buruk, pengaturan pengguna tertentu, perdebatan sumber daya GPU, dan dukungan codec platform yang terbatas. Ketika dihadapkan dengan keterbatasan ini, konfigurasi aliran otomatis harus kembali secara bertahap dan dengan cara yang masuk akal. Contoh:

  • Variasikan bandwidth streaming yang dibutuhkan antara 10,2 Mbps (5 rendering) dan 1,5 Mbps (2 rendering).

  • Variasikan resolusi maksimum trek kualitas tertinggi dari 1080p (4 atau 5 rendering) hingga 480p (2 rendering).

  • Variasikan jumlah rendering antara 5 (1080p, 720p, 480p, 360p, 160p) dan 2 (480p, 360p).

  • Variasikan pilihan rendering di serangkaian resolusi yang didukung (1080p, 720p, 540p, 480p, 360p, 240p, dan 160p).

  • Variasikan bitrate dari masing-masing rendering dari 6 Mbps (misalnya, 1080p60 AVC) hingga 200 Kbps (misalnya, AVC 160p).

  • Variasikan frame rate antara tinggi (60, 50, atau 48 fps) dan standar (30, 25, atau 24 fps).

  • Variasikan codec video untuk menyeimbangkan safety/viewer dukungan dan efisiensi codec (misalnya, H.264/AVC atau H.265/HEVC).

  • Variasikan algoritma scaler untuk menyeimbangkan sumber daya GPU (misalnya, Lanczos, bicubic, dan bilinear).

  • Bervariasi pengaturan pengkodean video (termasuk profil codec, preset encoder, jendela tampilan depan, AQ psyko visual, dan jumlah B-frames), tergantung pada vendor GPU dan versi driver (misalnya, P6 pada NVIDIA GeForce RTX 4080 hingga P4 pada NVIDIA GTX 950). GeForce

Mengekspos Preferensi kepada Pengguna

Anda harus mengaktifkan pengguna untuk mengkonfigurasi pengaturan berikut:

  • Resolusi keluaran

  • Kecepatan bingkai keluaran

  • Lagu video maksimum

  • Bitrate streaming maksimum

Opsional: Menetapkan Batas di Perangkat Lunak Siaran

Perangkat lunak atau layanan Anda dapat memberikan default atau membatasi kemampuan pengguna untuk mengkonfigurasi pengaturan ini. Misalnya, jika perangkat lunak atau layanan Anda perlu mempertahankan sumber daya GPU dan Anda ingin membatasi jumlah sesi encoder video yang digunakan oleh video multitrack, Anda dapat memilih untuk membatasi pengguna menjadi 3 Trek Video Maksimum dan menunjukkan dengan jelas kepada pengguna bahwa Otomatis berarti “hingga 3.”

Batas yang ditetapkan oleh tujuan

Kunci aliran dalam GetClientConfiguration permintaan diperlukan agar layanan dapat mengidentifikasi saluran dan menentukan apakah ada batasan per saluran. Misalnya, Amazon IVS menyediakan multitrackInputConfiguration.maximumResolution properti untuk STANDARD saluran. Ini dapat digunakan untuk membatasi resolusi trek individu mana pun, sehingga pelanggan dapat menyediakan kualitas khusus (misalnya, streaming 720p60 atau 1080p60) kepada pembuat konten tertentu atau mengontrol biaya keluaran mereka.

Menangani Peringatan dan Kesalahan

GetClientConfiguration mengembalikan peringatan dan kesalahan dalam keadaan yang berbeda, jadi Anda harus menerapkan dukungan yang menghadap pengguna untuk menangani peringatan dan kesalahan.

Peringatan bersifat informatif. Pengguna harus diizinkan untuk melanjutkan streaming atau membatalkan. Berikut adalah contoh peringatan:

  • Versi driver NVIDIA yang diinstal pada mesin pengguna tidak akan lagi didukung pada saat ini DD/MM/YYYY.

Kes alahan dianggap fatal. Pengguna tidak boleh diizinkan untuk melanjutkan streaming. Berikut adalah contoh kesalahan:

  • Saluran tidak dikonfigurasi untuk mendukung video multitrack.

  • Versi driver GPU kedaluwarsa/Tidak didukung.

  • GPU Anda tidak didukung.

  • Kunci aliran yang disediakan tidak valid.

  • Kecepatan bingkai Anda 59,94 tidak didukung oleh Amazon IVS Multitrack Video. Di Pengaturan > Video, pilih salah satu nilai yang didukung berikut: 24, 25, 30, 48, 50, 60.

  • Permintaan konfigurasi tidak memiliki data yang diperlukan (versi driver GPU, model GPU, dll).

Konfigurasikan Penskalaan dan Pengkodean Video

GetClientConfigurationmengembalikan pengaturan penskalaan dan pengkodean yang mengoptimalkan untuk pengalaman penampil terbaik, tanpa mempengaruhi kinerja aplikasi (misalnya, game/broadcast perangkat lunak) dan mempertimbangkan pengaturan pengguna. Gunakan pengaturan penskalaan dan pengkodean yang tepat yang dikembalikan oleh GetClientConfiguration. GetClientConfiguration memperhitungkan kebutuhan spesifik vendor yang berbeda dan arsitektur GPU yang berubah dari waktu ke waktu.

Selain pengaturan penskalaan dan pengkodean (seperti preset), Anda harus:

  • Sejajarkan semua encoder dan pastikan bahwa IDR untuk semua rendering memiliki PTS yang sama. Ini diperlukan untuk menghindari kebutuhan transcoding sisi server untuk menyelaraskan beberapa rendering saat video didistribusikan dan dilihat menggunakan HLS tersegmentasi. Jika IDR tidak disejajarkan di seluruh trek video, pemirsa akan mengalami pergeseran waktu dan gagap selama peralihan rendisi dalam pemutaran ABR. (Untuk visualisasi, lihat gambar di Metrik Kinerja Siaran.)

  • Mengkloning SEI/OBU data (misalnya, keterangan) di semua trek video. Ini diperlukan agar pemutar video dapat mengakses SEI/OBU data terlepas dari kualitas individu yang ditonton.

Hubungkan Menggunakan RTMP yang Ditingkatkan

Untuk dokumentasi tentang streaming multitrack melalui RTMP yang disempurnakan, lihat spesifikasi Enh anced RTMP v2.

Saat menghubungkan dengan RTMP yang ditingkatkan, video multitrack Amazon IVS memiliki beberapa persyaratan:

  • Lagu video utama dengan kualitas tertinggi harus dikemas dan dikirim sebagai paket video trek tunggal RTMP yang ditingkatkan. Misalnya, videoPacketType bisaCodedFrames,, CodedFramesXSequenceStart, danSequenceEnd.

  • Semua trek video tambahan harus dikemas dan dikirim sebagai paket video multitrack RTMP yang disempurnakan (misalnya, videoPacketType isMultitrack), dengan jenis paket multitrack diatur ke satu trek (misalnya, videoMultitrackType is). OneTrack

  • Kunci aliran di authentication bidang yang dikembalikan oleh GetClientConfiguration harus digunakan untuk terhubung ke server RTMP.

  • config_idNilai yang dikembalikan oleh GetClientConfiguration harus ditambahkan sebagai argumen query ke string koneksi RTMP dengan kunci. clientConfigId

Berikut ini adalah contoh konfigurasi aliran:

video PacketType video MultitrackType TrackID Resolusi

CodedFrames

CodedFramesX

SequenceStart

SequenceEnd

NA - video tidak MultitrackType dikirim dengan RTMP single-track yang ditingkatkan.

NA - TrackID tidak dikirim dengan RTMP single-track yang ditingkatkan.

1920x1080

Multitrack

OneTrack

1

1280X720

Multitrack

OneTrack

2

852X480

Multitrack

OneTrack

3

640x360

Perangkat lunak siaran Anda harus menggunakan data yang dikembalikan oleh GetClientConfiguration in ingest_endpoints dan protokol (RTMP atau RTMPS) yang dipilih oleh pengguna untuk mengidentifikasi titik akhir untuk terhubung. Gunakan url_template dan kunci aliran yang dikembalikan authentication untuk membuat URL dan sertakan config_id sebagai argumen clientConfigId kueri. Jika Anda mengizinkan pengguna untuk menentukan argumen kueri RTMP (misalnya,?bandwidthtest=1), Anda harus menambahkannya selain menentukan. clientConfigId Berikut adalah contoh tanggapan dari GetClientConfiguration:

{ "ingest_endpoints": [ { "protocol": "RTMP", "url_template": "rtmp://iad05.contribute.live-video.net/app/{stream_key}", "authentication": "v1_5f2e593731dad88b6bdb03a3517d306ef88a73e29619ee4b49012d557e881484_65c5dc81_7b2276223a302c2262223a393939392c2274223a5b7b2277223a3634302c2268223a3336302c2262223a3530302c226330223a312c226331223a302c226332223a307d2c7b2277223a313238302c2268223a3732302c2262223a313730302c226330223a312c226331223a302c226332223a307d2c7b2277223a313932302c2268223a313038302c2262223a363030302c226330223a312c226331223a302c226332223a307d5d7d_live_495665160_FC45sNuCYUwLnCVtCnXSjEWkusXzJI" }, { "protocol": "RTMPS", "url_template": "rtmps://iad05.contribute.live-video.net/app/{stream_key}", "authentication": "v1_5f2e593731dad88b6bdb03a3517d306ef88a73e29619ee4b49012d557e881484_65c5dc81_7b2276223a302c2262223a393939392c2274223a5b7b2277223a3634302c2268223a3336302c2262223a3530302c226330223a312c226331223a302c226332223a307d2c7b2277223a313238302c2268223a3732302c2262223a313730302c226330223a312c226331223a302c226332223a307d2c7b2277223a313932302c2268223a313038302c2262223a363030302c226330223a312c226331223a302c226332223a307d5d7d_live_495665160_FC45sNuCYUwLnCVtCnXSjEWkusXzJI" } ], "meta": { "config_id": "d34c2f7e-ce3a-4be4-a6a0-f51960abbc4f", … } … }

Kemudian, jika pengguna memilih RTMP, Anda akan membuka koneksi ke:

rtmp://iad05.contribute.live-video.net/app/v1_5f2e593731dad88b6bdb03a3517d306ef88a73e29619ee4b49012d557e881484_65c5dc81_7b2276223a302c2262223a393939392c2274223a5b7b2277223a3634302c2268223a3336302c2262223a3530302c226330223a312c226331223a302c226332223a307d2c7b2277223a313238302c2268223a3732302c2262223a313730302c226330223a312c226331223a302c226332223a307d2c7b2277223a313932302c2268223a313038302c2262223a363030302c226330223a312c226331223a302c226332223a307d5d7d_live_495665160_FC45sNuCYUwLnCVtCnXSjEWkusXzJI?clientConfigId=d34c2f7e-ce3a-4be4-a6a0-f51960abbc4f

Menangani Pemutusan Video

Sistem video multitrack memberlakukan beberapa batasan. Secara umum, batasannya ada karena tiga alasan:

  1. Keamanan sistem — IVS perlu membatasi input untuk skalabilitas. Contohnya termasuk batas bandwidth streaming berdasarkan per-saluran yang memengaruhi pemrosesan input, hak bitrate pada basis trek atau resolusi yang memengaruhi output capacity/cost, dan hak jumlah trek yang memengaruhi kapasitas CDN. replication/delivery

  2. Fungsionalitas sistem — Layanan perlu membatasi input untuk kompatibilitas fitur (misalnya, dukungan platform untuk codec individu atau dukungan kontainer pengiriman untuk codec lanjutan).

  3. Pengalaman pemirsa — Layanan perlu membatasi masukan untuk pengalaman pemirsa dan reputasi merek. Misalnya, layanan mengontrol algoritma ABR pemain yang menggerakkan QoE di semua perangkat pengguna target (desktop, seluler TV/OTT, dll.) Dan aplikasi (browser, asli, dll.).

Sistem video memutuskan koneksi klien dalam beberapa skenario:

  • Klien mencoba untuk terhubung ke server RTMP dengan video multitrack tetapi tidak menggunakan kunci aliran yang dikembalikan oleh. GetClientConfiguration

  • Klien menyediakan video multitrack yang tidak sesuai dengan spesifikasi yang dikembalikan oleh GetClientConfiguration; misalnya:

    • Jumlah trek tidak cocok.

    • Sebuah trek individu memiliki codec yang tidak cocok.

    • Sebuah trek individu memiliki resolusi yang tidak cocok.

    • Sebuah trek individu memiliki frekuensi gambar yang tidak cocok.

    • Sebuah trek individu memiliki bitrate yang tidak cocok.

  • Klien tidak menyediakan trek video yang memiliki IDR yang selaras.

  • Metrik kinerja siaran tidak mendahului setiap IDR di setiap trek.

Pemutusan dapat terjadi pada awal streaming (yaitu, saluran tidak pernah ditayangkan) atau mid-stream (yaitu, saluran langsung, ketidakcocokan terdeteksi, dan kemudian klien terputus).

Menghubungkan Kembali Secara Otomatis

Validitas kunci aliran yang dikembalikan GetClientConfiguration adalah 48 jam atau hingga kunci aliran dibatalkan dengan panggilan DeleteStreamKey. Durasi maksimum streaming IVS adalah 48 jam; setelah itu, streaming dihentikan dan sesi streaming terputus. Sambungan kembali yang berhasil (secara otomatis atau manual) memulai aliran baru.

Perangkat lunak siaran Anda dapat menerapkan koneksi ulang otomatis. Jika Anda mendukung koneksi ulang otomatis, Anda harus mengizinkan pengguna untuk enable/disable itu dan ikuti panduan ini:

  • Terapkan penundaan coba ulang backoff eksponensial (termasuk penyimpangan acak kecil) di antara upaya koneksi.

  • Coba lagi untuk maksimal 25 upaya koneksi. Misalnya, OBS Studio mencoba lagi 25 kali, dengan waktu tunggu yang meningkat secara eksponensial antara upaya yang dibatasi pada 15 menit. Dalam praktiknya, ini berarti percobaan ulang terakhir terjadi kira-kira 3 jam setelah terputus.

  • Jika Anda terputus segera setelah mengirim publish saat menghubungkan, hubungi GetClientConfiguration, konfigurasikan ulang pengaturan encoder, lalu coba sambungkan lagi.

Menghentikan Streaming dan Memutuskan Sambungan

Ketika pengguna berhenti streaming, dan jika koneksi TCP masih terbuka (misalnya, koneksi tingkat bawah tidak diatur ulang), Anda harus mengirim FCUNPublish (contoh implementasi di OBS Studio) sebelum menutup koneksi RTMP. Ini sangat penting untuk menandakan niat pengguna tentang akhir aliran, karena fitur hilir bergantung padanya untuk beroperasi dengan baik.

Fitur yang Diperlukan: Metrik Kinerja Siaran (BPM)

Untuk mengaktifkan peningkatan berkelanjutan dari konfigurasi aliran otomatis, untuk memberikan pengaturan aliran terbaik, metrik kinerja siaran (BPM) harus diukur dan dikirim.

Metrik dikumpulkan dan dikirim dalam band melalui pesan SEI (for AVC/HEVC). Dua kelas data dikumpulkan:

  • Stempel waktu dikumpulkan untuk mengukur latensi ujung ke ujung antara penyiar dan pemirsa. Mereka berguna untuk:

    • Memberikan perkiraan latensi ujung ke ujung kepada penyiar atau penonton.

    • Menganalisis jitter stempel waktu yang mungkin mengindikasikan stres sistem atau konektivitas jaringan mil pertama yang buruk.

    • Mereferensikan waktu peristiwa dunia nyata untuk menyelaraskan dan menggabungkan data penghitung deret waktu.

    Stempel waktu yang dikirim dari penyiar didasarkan pada jam referensi umum global, biasanya NTP-synchronized jam menggunakan zona waktu UTC+0. RFC3339 biasanya digunakan untuk skenario “waktu Internet.” Ini memberikan referensi absolut, membuat perhitungan perbedaan temporal menjadi sepele.

  • Penghitung bingkai dikumpulkan untuk mengukur kinerja perangkat lunak siaran dan encoder video pada tingkat bingkai. Mereka berguna untuk:

    • Menyediakan penyiar dengan dasbor kinerja yang menyertakan sinyal tambahan, untuk membantu mereka meningkatkan pengaturan streaming mereka.

    • Memberikan sinyal proaktif yang mungkin berkorelasi dengan perubahan lingkungan seperti driver GPU atau OS yang baru dirilis versions/patches.

    • Memberikan umpan balik untuk memungkinkan layanan video mengulangi dan merilis peningkatan dengan aman GetClientConfiguration, termasuk dukungan untuk vendor perangkat keras baru, model GPU baru, codec baru, fitur driver baru, penyetelan pengaturan encoder video tambahan, dan preset baru yang dikendalikan pengguna (misalnya, “Pengaturan PC Ganda” vs. “Pengaturan Gaming+Streaming”).

Menyisip SEI/OBU kan Pesan

Lihat Definisi Pesan BPM untuk definisi aliran byte pesan tertentu.

Metrik BPM harus dimasukkan pada semua trek video sebelum IDR. Tiga pesan (BPM TS, BPM SM, dan BPM ERM) harus dikirim bersama, tetapi masing-masing harus dikirim sebagai NUT () terpisah. AVC/HEVC

BPM SM dan BPM ERM yang dikirim di segmen pertama harus memiliki penghitung bingkai disetel ke 0. Ini mungkin tampak berlawanan dengan intuisi pada awalnya; namun, penghitung seperti jumlah frame yang dikodekan per rendisi tidak memiliki data yang berarti sampai setelah encoding selesai, dan hasilnya adalah penghitung bingkai di segmen N sejajar dengan segmen. N-1 Yang terbaik adalah memikirkan metrik BPM sebagai seri data berwaktu yang dikirimkan dalam bitstream video pada interval IDR. Jika perlu, penataan ulang seri data yang tepat harus dilakukan oleh penerima menggunakan stempel waktu yang disediakan.

Ilustrasi di bawah ini menggambarkan skenario khas untuk aliran multitrack tiga rendisi. Dengan ukuran segmen tipikal dua detik, metrik akan dikirim setiap dua detik untuk setiap rendisi.

Skenario khas untuk aliran multitrack tiga rendisi.

Pemilihan server otomatis membantu pengguna memilih server ingest terbaik untuk dihubungkan untuk streaming langsung mereka, mengingat perubahan kondisi jaringan global dan menyerap ketersediaan PoP (Point of Presence).

Jika perangkat lunak siaran Anda mendukung pemilihan server otomatis, kami mengharapkan perilaku yang berbeda tergantung pada apakah perangkat lunak diimplementasikan GetClientConfiguration and/or FindIngest. Setiap skenario tercantum secara terpisah di bawah ini.

Jika perangkat lunak siaran mengimplementasikan keduanya GetClientConfiguration dan FindIngest:

Pemilihan UI Pengguna Hubungkan ke titik akhir menelan yang ditentukan oleh...

Otomatis

GetClientConfiguration

Titik akhir menelan spesifik dari FindIngest

Pilihan pengguna

Tentukan Server Kustom

Pilihan pengguna

Jika perangkat lunak siaran mengimplementasikan GetClientConfiguration tetapi tidak mengimplementasikan FindIngest:

Pemilihan UI Pengguna Hubungkan ke titik akhir menelan yang ditentukan oleh...

Otomatis

GetClientConfiguration

Tentukan Server Kustom

Pilihan pengguna

Jika perangkat lunak siaran tidak mengimplementasikan GetClientConfiguration tetapi mengimplementasikan FindIngest:

Pemilihan UI Pengguna Hubungkan ke titik akhir menelan yang ditentukan oleh...

Otomatis

FindIngest

Titik akhir menelan spesifik dari FindIngest

Pilihan pengguna

Tentukan Server Kustom

Pilihan pengguna

Jika perangkat lunak siaran tidak mengimplementasikan GetClientConfiguration atau FindIngest:

Pemilihan UI Pengguna Hubungkan ke titik akhir menelan yang ditentukan oleh...

Otomatis

URL konsumsi global:

  • Untuk RTMP: rtmp: //ingest.global-contrie.live-video. net/app

  • Untuk RTMPS: rtmp: //ingest.global-contrie.live-video.net: 443/app

Tentukan Server Kustom

Pilihan pengguna

Lihat Menggunakan FindIngest Server untuk Tujuan Streaming Otomatis untuk informasi selengkapnya tentang menggunakan titik akhir ingest yang ditentukan oleh. FindIngest

Saat pengguna mengonfigurasi tujuan streaming mereka, Anda harus menanyakan FindIngest dan memberi pengguna kemampuan untuk:

  • Pilih antara RTMP atau RTMPS (default untuk Amazon IVS).

  • Pilih Otom atis untuk server.

  • Pilih server tertentu dari daftar yang dikembalikan oleh FindIngest

  • Masukkan server khusus; misalnya, gunakan T entukan Server Kustom.

Anda dapat memfilter daftar yang dikembalikan FindIngest berdasarkan protokol yang dipilih oleh pengguna (RTMP vs RTMPS) atau pertimbangan lainnya.

Misalnya, implementasi Amazon IVS di OBS Studio mencapai ini dengan menyediakan drop-down Server sederhana dengan opsi berikut:

  • Otomatis (RTMPS, Direkomendasikan)

  • Otomatis (RTMP)

  • AS Timur: Ashburn, VA (5) (RTMPS)

  • AS Timur: New York, NY (50) (RTMPS)

  • AS Timur: New York, NY (RTMPS)

  • AS Timur: Ashburn, VA (5) (RTMP)

  • AS Timur: New York, NY (50) (RTMP)

  • AS Timur: New York, NY (RTMP)

  • Tentukan Server Kustom

Ketika Tentukan Server Kustom dipilih, kotak teks disediakan bagi pengguna untuk memasukkan URL RTMP.

Jika Anda menggunakan titik akhir ingest yang ditentukan oleh FindIngest saat Auto ditentukan untuk tujuan streaming, gunakan entri dengan priority nilai terendah yang dikembalikan oleh. FindIngest Untuk mengurangi waktu yang dibutuhkan streaming untuk ditayangkan, Anda dapat menyimpan FindIngest respons dalam cache. Jika Anda melakukan cache respons, perbarui nilai cache secara teratur.

Jika pengguna memilih RTMP, gunakan url_template string sebagai tujuan siaran RTMP. Jika pengguna memilih RTMPS, gunakan url_template_secure string sebagai tujuan siaran RTMPS. Dalam kedua kasus, ganti {stream_key} dengan kunci aliran pengguna.

Definisi Pesan Metrik Kinerja Siaran (BPM)

Pesan BPM didasarkan pada sintaks SEI H.264 standar. Untuk referensi, sintaks SEI data pengguna yang tidak terdaftar dari H.264 spesifikasi adalah:

Data pengguna sintaks pesan SEI tidak terdaftar.

Untuk pesan BPM, semua aturan parsing dan notasi dari H.264 standar berlaku, misalnya, “u (128)” berarti bilangan bulat 128-bit yang tidak ditandatangani, MSB terlebih dahulu.

Tiga pesan SEI didefinisikan untuk BPM:

Semua pesan BPM SEI mengirim UUID 128-bit yang diperlukan oleh user_data_unregistered() sintaks, diikuti oleh loop byte muatan. Pesan yang dihasilkan kemudian dienkapsulasi dalam semantik tingkat yang lebih tinggi (misalnya, NALU, RBSP, dan pencegahan emulasi kode awal).

BPM TS (Stempel Waktu) SEI

Pesan BPM TS SEI menyampaikan satu atau lebih stempel waktu terkait. Misalnya, klien dapat memberi sinyal stempel waktu untuk komposisi bingkai, permintaan enkode bingkai, permintaan enkode bingkai selesai, dan paket disisipkan dalam satu pesan SEI, dan klien dapat memutuskan apakah masing-masing stempel waktu ini harus dikirim sebagai jam dinding () atau delta (perbedaanRFC3339/ISO8601-style) jam atau durasi-sejak zaman. Harus ada satu stempel waktu yang menyediakan referensi untuk tipe delta; ini harus ditangani oleh penerapan, bukan oleh kendala sintaksis apa pun.

user_data_unregistered_bpm_ts( payloadSize ) {

C

Deskriptor

  • uuid_iso_iec_11578

5

U (128)

  • ts_reserved_zero_4bits

5

b (4)

  • num_timestamps_minus1

5

U (4)

  • for( i = 0; i <= num_timestamps_minus1; i++ ) {

    • timestamp_type[i]

5

U (8)

    • timestamp_event[i]

5

U (8)

    • if (timestamp_type[i] == 1)

      • rfc3339_ts[i]

5

st (v)

    • else if (timestamp_type[i] == 2)

      • duration_since_epoch_ts[i]

5

U (64)

    • else if (timestamp_type[i] == 3)

      • delta_ts[i]

5

saya (64)

  • }

}

Tabel Deskripsi Bidang BPM TS SEI

Bidang Deskripsi

uuid_iso_iec_11578

Setel ke hex: 0aecffe752724e2fa62fd19cd61a93b5

Dengan penggunaan pesan SEI yang tidak terdaftar, UUID diperlukan untuk memisahkan pesan ini dari pesan yang tidak terdaftar lainnya.

ts_reserved_zero_4bits

Terpesan untuk digunakan di masa mendatang. Setel keb('0000'). Penerima harus mengabaikan bit-bit ini.

num_timestamps_minus1

num_timestamps=num_timestamps_minus1+1

num_timestamps_minus1harus antara 0 dan 15, artinya antara 1 dan 16 stempel waktu dapat ditandai.

timestamp_type

Lihat Tabel timestamp_type.

timestamp_event

Salah satu dari yang berikut:

  • BPM_TS_EVENT_CTS = 1//Acara Waktu Komposisi

  • BPM_TS_EVENT_FER = 2//Acara Permintaan Pengkodean Bingkai

  • BPM_TS_EVENT_FERC = 3//Permintaan Pengkodean Bingkai Acara Lengkap

  • BPM_TS_EVENT_PIR = 4//Acara Permintaan Interleave Paket

Tidak ada diskriminator sintaksis untuk mengidentifikasi keunikan dalam kasus di mana num_timestamps_minus1 lebih besar dari 0 (yaitu, lebih dari satu stempel waktu ditandai); karenanya, timestamp_event harus unik dalam loop SEI. Mensinyalan beberapa stempel waktu dengan yang sama tidak timestamp_event dihalangi; Namun, interpretasi stempel waktu berada di luar cakupan pesan.

Tabel timestamp_type

timestamp_typemenentukan jenis seperti:

  • Format “Jam dinding” di mana tanggal dan waktu berbasis kalender ditandai.

  • Durasi sejak zaman.

  • Stempel waktu delta di mana perbedaan antara dua peristiwa ditandai.

  • Format timestamp tambahan yang mungkin diperlukan di masa mendatang.

tipe_stempel waktu Nama Deskripsi

0

tidak terdefinisi

Tidak terdefinisi — jangan gunakan.

1

rfc3339_ts

RFC3339 adalah profil ISO8601 untuk penggunaan Internet, yang membatasi beberapa opsi dalam ISO8601.

timestamp_type==1akan menggunakan notasi RFC3339-based waktu. Perhatikan bahwa RFC3339 tidak mendukung zona waktu. Semua stempel waktu relatif terhadap UTC (alias waktu “Zulu”), yang menurut definisi adalah offset UTC pukul 00:00.

r fc3339_ts akan menjadi string. st(v)didefinisikan dalam bagian 7.2 dari H.264 standar.

Lihat catatan tentang detik kabisat, di bawah tabel ini.

Contoh: 2024-03-25T15:10:34.489Z (489 mengacu pada milidetik)

2

duration_since_epoch_ts

Durasi sejak zaman pada 1970-01-01 T00:00:00Z000 dalam milidetik.

Lihat catatan tentang detik kabisat, di bawah tabel ini.

3

delta_ts

Stempel waktu delta, mengekspresikan perbedaan dalam nanodetik antara 2 peristiwa. Bilangan bulat yang ditandatangani memungkinkan delta positif dan negatif untuk diberi sinyal.

4-255

Dicadangkan

Dicadangkan.

Catatan tentang detik kab isat: Penting untuk dicatat bahwa kesepakatan dibuat untuk menghapus penggunaan detik kabisat pada tahun 2035. Lihat entri Wikipedia pada detik kabisat untuk detailnya. Sebaiknya gunakan stempel waktu yang mengecualikan detik kabisat. Ini sejalan dengan praktik yang diharapkan pada tahun 2035 dan menghindari kemungkinan kesalahan perhitungan dalam waktu.

BPM SM (Metrik Sesi) SEI

Pesan BPM SM SEI menyampaikan kumpulan metrik yang berhubungan dengan sesi pengirim keseluruhan. Di OBS Studio, ini berarti mengirim penghitung bingkai berikut:

  • Bingkai sesi dirender

  • Frame sesi dijatuhkan

  • Frame sesi tertinggal

  • Output frame sesi

Pesan SEI ini juga menyertakan stempel waktu. Ini berlebihan dengan BPM TS SEI; Namun, memberikan stempel waktu eksplisit di setiap pesan SEI menyediakan unit perilaku atom dan mengurangi beban pada penerima untuk menyelaraskan kembali data. Juga, jika muncul kebutuhan untuk menghentikan atau tidak mengirim BPM TS SEI, masih akan ada stempel waktu eksplisit dalam pesan BPM SM SEI untuk digunakan.

user_data_unregistered_bpm_sm( payloadSize ) {

C

Deskriptor

  • uuid_iso_iec_11578

5

U (128)

  • ts_reserved_zero_4bits

5

b (4)

  • num_timestamps_minus1

5

U (4)

  • for( i = 0; i <= num_timestamps_minus1; i++ ) {

    • timestamp_type[i]

5

U (8)

    • timestamp_event[i]

5

U (8)

    • if (timestamp_type[i] == 1)

      • rfc3339_ts[i]

5

st (v)

    • else if (timestamp_type[i] == 2)

      • duration_since_epoch_ts[i]

5

U (64)

    • else if (timestamp_type[i] == 3)

      • delta_ts[i]

5

saya (64)

  • }

  • ts_reserved_zero_4bits

5

b (4)

  • num_counters_minus1

5

U (4)

  • for( i = 0; i <= num_counters_minus1; i++ ) {

    • counter_tag[i]

5

b (8)

    • counter_value[i]

5

b (32)

  • }

}

Tabel Deskripsi Bidang BPM SM SEI

Banyak bidang dalam pesan SEI ini mirip dengan bidang BPM TS SEI. Perbedaan yang signifikan adalah nilai UUID, jumlah stempel waktu yang diharapkan, dan penghitung yang ditransmisikan.

Bidang Deskripsi

uuid_iso_iec_11578

Setel ke hex: ca60e71c-6a8b-4388-a377-151df7bf8ac2

Dengan penggunaan pesan SEI yang tidak terdaftar, UUID diperlukan untuk memisahkan pesan ini dari pesan yang tidak terdaftar lainnya.

ts_reserved_zero_4bits

Terpesan untuk digunakan di masa mendatang. Setel keb('0000'). Penerima harus mengabaikan bit-bit ini.

num_timestamps_minus1

num_timestamps=num_timestamps_minus1+1

num_timestamps_minus1harus antara 0 dan 15, artinya antara 1 dan 16 stempel waktu dapat ditandai.

Saat ini, ini harus 0 (menunjukkan stempel waktu tunggal).

timestamp_type

Lihat Tabel timestamp_type. Untuk BPM SM SEI, ini adalah string tipe 1 - RFC3339.

timestamp_event

Salah satu dari yang berikut:

  • BPM_TS_EVENT_CTS = 1//Acara Waktu Komposisi

  • BPM_TS_EVENT_FER = 2//Acara Permintaan Pengkodean Bingkai

  • BPM_TS_EVENT_FERC = 3//Permintaan Pengkodean Bingkai Acara Lengkap

  • BPM_TS_EVENT_PIR = 4//Acara Permintaan Interleave Paket

Tidak ada diskriminator sintaksis untuk mengidentifikasi keunikan dalam kasus di mana num_timestamps_minus1 lebih besar dari 0 (yaitu, lebih dari satu stempel waktu ditandai); karenanya, timestamp_event harus unik dalam loop SEI. Mensinyalan beberapa stempel waktu dengan yang sama tidak timestamp_event dihalangi; Namun, interpretasi stempel waktu berada di luar cakupan pesan.

Catatan: Amazon IVS mengharapkan BPM SM SEI timestamp_event hanya menggunakan setel ke 4 ()BPM_TS_EVENT_PIR. Ini akan berkembang karena dukungan untuk acara stempel waktu tambahan ditambahkan.

num_counters_minus1

num_counters=num_counters_minus1+1

num_counters_minus1harus antara 0 dan 15, artinya antara 1 dan 16 penghitung dapat ditandai.

Untuk BPM SM SEI, ini harus 3 (artinya 4 penghitung).

counter_tag

Salah satu dari yang berikut:

  • BPM_SM_FRAMES_RENDERED = 1//Bingkai yang dirender oleh komposer

  • BPM_SM_FRAMES_LAGGED = 2//Bingkai tertinggal oleh komposer

  • BPM_SM_FRAMES_DROPPED = 3//Bingkai turun karena kemacetan jaringan

  • BPM_SM_FRAMES_OUTPUT = 4//Total output frame (jumlah semua sink rendisi encoder video)

counter_value

Nilai perbedaan 32-bit untuk yang ditentukancounter_tag, relatif terhadap terakhir kali dikirim. Misalnya, dengan rendering 60 fps, setiap 2 detik counter_value harus 120.

Contoh BPM SM

Berikut adalah contoh BPM SM SEI yang dikirim ke Amazon IVS:

  • uuid_iso_iec_11578(16 byte): ca60e71c-6a8b-4388-a377-151df7bf8ac2

  • ts_reserved_zero_4bits(4 bit): 0x0

  • num_timestamps_minus1(4 bit): 0x0 (artinya 1 stempel waktu sedang dikirim)

  • timestamp_type(1 byte): 0x01 (stempel waktu RFC3339 - format string)

  • timestamp_event(1 byte): 0x04 (BPM_TS_EVENT_PIR)

  • rfc3339_ts: “2024-25 MaretT15:10:34.489Z”

  • ts_reserved_zero_4bits(4 bit): 0x0

  • num_counters_minus1(4 bit): 0x3 (artinya 4 penghitung sedang dikirim)

  • counter_tag(1 byte): 0x01 (frame yang dirender oleh compositor sejak pesan terakhir)

  • counter_value(4 byte)

  • counter_tag(1 byte): 0x02 (frame tertinggal oleh komposer sejak pesan terakhir)

  • counter_value(4 byte)

  • counter_tag(1 byte): 0x03 (frame turun karena kemacetan jaringan sejak pesan terakhir)

  • counter_value(4 byte)

  • counter_tag(1 byte): 0x04 (total output frame (jumlah semua rendisi encoder video yang tenggelam sejak pesan terakhir)

  • counter_value(4 byte)

BPM ERM (Metrik Rendisi Terkodekan) SEI

Pesan BPM ERM SEI menyampaikan kumpulan metrik yang berhubungan dengan setiap rendisi yang dikodekan. Di OBS Studio, ini berarti mengirim penghitung bingkai berikut:

  • Masukan bingkai rendisi

  • Bingkai rendisi dilewati

  • Output bingkai rendisi

Pesan SEI ini juga menyertakan stempel waktu. Ini berlebihan dengan BPM TS SEI; Namun, memberikan stempel waktu eksplisit di setiap pesan SEI menyediakan unit perilaku atom dan mengurangi beban pada penerima untuk menyelaraskan kembali data. Juga, jika muncul kebutuhan untuk menghentikan atau tidak mengirim BPM TS SEI, masih akan ada stempel waktu eksplisit dalam pesan BPM ERM SEI untuk digunakan.

user_data_unregistered_bpm_erm( payloadSize ) {

C

Deskriptor

  • uuid_iso_iec_11578

5

U (128)

  • ts_reserved_zero_4bits

5

b (4)

  • num_timestamps_minus1

5

U (4)

  • for( i = 0; i <= num_timestamps_minus1; i++ ) {

    • timestamp_type[i]

5

U (8)

    • timestamp_event[i]

5

U (8)

    • if (timestamp_type[i] == 1)

      • rfc3339_ts[i]

5

st (v)

    • else if (timestamp_type[i] == 2)

      • duration_since_epoch_ts[i]

5

U (64)

    • else if (timestamp_type[i] == 3)

      • delta_ts[i]

5

saya (64)

  • }

  • ts_reserved_zero_4bits

5

b (4)

  • num_counters_minus1

5

U (4)

  • for( i = 0; i <= num_counters_minus1; i++ ) {

    • counter_tag[i]

5

b (8)

    • counter_value[i]

5

b (32)

  • }

}

Tabel Deskripsi Bidang BPM ERM SEI

Banyak bidang dalam pesan SEI ini mirip dengan bidang BPM TS SEI dan bidang BPM SM SEI. Perbedaan yang signifikan adalah nilai UUID, jumlah stempel waktu yang diharapkan, dan penghitung yang ditransmisikan.

Bidang Deskripsi

uuid_iso_iec_11578

Setel ke hex: f1fbc1d5-101e-4fb5-a61e-b8ce3c07b8c0

Dengan penggunaan pesan SEI yang tidak terdaftar, UUID diperlukan untuk memisahkan pesan ini dari pesan yang tidak terdaftar lainnya.

ts_reserved_zero_4bits

Terpesan untuk digunakan di masa mendatang. Setel keb('0000'). Penerima harus mengabaikan bit-bit ini.

num_timestamps_minus1

num_timestamps=num_timestamps_minus1+1

num_timestamps_minus1harus antara 0 dan 15, artinya antara 1 dan 16 stempel waktu dapat ditandai.

Saat ini, ini harus 0 (menunjukkan stempel waktu tunggal).

timestamp_type

Lihat Tabel timestamp_type.

Ini akan menjadi string tipe 1 - RFC3339.

timestamp_event

Salah satu dari yang berikut:

  • BPM_TS_EVENT_CTS = 1//Acara Waktu Komposisi

  • BPM_TS_EVENT_FER = 2//Acara Permintaan Pengkodean Bingkai

  • BPM_TS_EVENT_FERC = 3//Permintaan Pengkodean Bingkai Acara Lengkap

  • BPM_TS_EVENT_PIR = 4//Acara Permintaan Interleave Paket

Tidak ada diskriminator sintaksis untuk mengidentifikasi keunikan dalam kasus di mana num_timestamps_minus1 lebih besar dari 0 (yaitu, lebih dari satu stempel waktu ditandai); karenanya, timestamp_event harus unik dalam loop SEI. Mensinyalan beberapa stempel waktu dengan yang sama tidak timestamp_event dihalangi; Namun, interpretasi stempel waktu berada di luar cakupan pesan.

Catatan: Amazon IVS mengharapkan BPM ERM SEI menggunakan timestamp_event set hanya ke 4 (). BPM_TS_EVENT_PIR Ini akan berkembang karena dukungan untuk acara stempel waktu tambahan ditambahkan.

num_counters_minus1

num_counters=num_counters_minus1+1

num_counters_minus1harus antara 0 dan 15, artinya antara 1 dan 16 penghitung dapat ditandai.

Untuk BPM ERM SEI, ini harus 2 (artinya 3 penghitung).

counter_tag

Salah satu dari yang berikut:

  • BPM_ERM_FRAMES_INPUT = 1//Bingkai input ke rendisi encoder

  • BPM_ERM_FRAMES_SKIPPED = 2//Bingkai dilewati oleh rendisi encoder

  • BPM_ERM_FRAMES_OUTPUT = 3//Output bingkai (dikodekan) oleh rendisi encoder

counter_value

Nilai perbedaan 32-bit untuk yang ditentukancounter_tag, relatif terhadap terakhir kali dikirim. Misalnya, dengan rendering 60 fps, setiap 2 detik counter_value harus 120.

Contoh BPM ERM

Berikut adalah contoh BPM ERM SEI yang dikirim ke Amazon IVS:

  • uuid_iso_iec_11578(16 byte): f1fbc1d5-101e-4fb5-a61e-b8ce3c07b8c0

  • ts_reserved_zero_4bits(4 bit): 0x0

  • num_timestamps_minus1(4 bit): 0x0 (Artinya 1 stempel waktu sedang dikirim)

  • timestamp_type(1 byte): 0x01 (stempel waktu RFC3339 - format string)

  • timestamp_event(1 byte): 0x04 (BPM_TS_EVENT_PIR)

  • rfc3339_ts: “2024-25 MaretT15:10:34.489Z”

  • ts_reserved_zero_4bits(4 bit): 0x0

  • num_counters_minus1(4 bit): 0x2 (Artinya 3 penghitung sedang dikirim)

  • counter_tag(1 byte): 0x01 (Input bingkai rendisi yang dikodekan sejak pesan terakhir)

  • counter_value(4 byte)

  • counter_tag(1 byte): 0x02 (Frame rendisi yang dikodekan dilewati sejak pesan terakhir)

  • counter_value(4 byte)

  • counter_tag(1 byte): 0x03 (Output bingkai rendisi yang dikodekan sejak pesan terakhir)

  • counter_value(4 byte)