Streaming Real-Time (RTS) diimplementasikan berdasarkan signaling Web Real-Time Communication (WebRTC). RTS mencapai streaming langsung dengan latensi ultra-rendah melalui node Content Delivery Network (CDN) Alibaba Cloud yang tersebar di seluruh dunia dan algoritma penjadwalan yang optimal. Topik ini menjelaskan spesifikasi signaling WebRTC yang digunakan untuk mengakses Global Realtime Transport Network (GRTN). Dokumen ini ditujukan bagi pengembang yang memahami dasar-dasar WebRTC.
Informasi latar belakang
Streaming langsung menggunakan protokol Transmission Control Protocol (TCP) memiliki latensi sekitar 3 hingga 6 detik. Untuk mengurangi latensi, ApsaraVideo Live menyediakan fitur bernilai tambah RTS, yang memungkinkan Anda melakukan streaming langsung melalui protokol User Datagram Protocol (UDP). RTS menawarkan layanan streaming berkualitas tinggi, lancar, dan mudah diakses dengan latensi ultra-rendah dalam milidetik serta mampu menangani puluhan juta permintaan bersamaan. Dalam desain RTS, perhatian besar diberikan pada pembangunan ekosistem terbuka dan standar. Selain SDK RTS yang disediakan oleh ApsaraVideo Live, Anda juga dapat menggunakan klien sendiri untuk mendorong atau menarik stream dari node CDN menggunakan metode signaling serupa dengan WebRTC. ApsaraVideo Live menyediakan node CDN global dan algoritma penjadwalan canggih untuk membantu Anda mengelola dan menggunakan layanan RTS dalam skala besar.
GRTN memberikan performa yang baik bahkan dalam kondisi jaringan buruk.
Prasyarat
ApsaraVideo Live telah diaktifkan. Untuk informasi lebih lanjut, lihat Memulai dengan ApsaraVideo Live.
RTS telah diaktifkan. Untuk informasi lebih lanjut, lihat Mengaktifkan RTS.
Sertifikat SSL untuk akses HTTPS telah dikonfigurasi untuk nama domain. Untuk informasi lebih lanjut, lihat Konfigurasi Akselerasi Aman HTTPS.
Proses signaling
Gambar berikut menunjukkan proses signaling.

Proses Signaling
Klien mengirimkan permintaan dengan penawaran Session Description Protocol (SDP).
Buat objek RTCPeerConnection di klien, tentukan apakah akan menerima atau mengirim sinyal audio dan video, lalu buat penawaran SDP.
// Tentukan apakah akan menerima atau mengirim sinyal audio dan video. { offerToReceiveVideo: true, offerToReceiveAudio: true }Kirim permintaan penarikan stream dari klien ke ApsaraVideo Live menggunakan metode POST HTTPS. Badan permintaan adalah string JSON. Untuk informasi lebih lanjut tentang parameter permintaan, lihat bagian Definisi Protokol Signaling RTS dari topik ini.
Parameter
versionmenentukan versi protokol signaling RTS. Atur nilainya menjadi 2.Parameter
sdk_versionmenentukan versi RTS SDK. Anda dapat mengatur parameter sesuai kebutuhan.
Kirim permintaan yang telah dibuat ke ApsaraVideo Live berdasarkan URL signaling menggunakan metode POST. Tentukan URL sumber dalam badan permintaan berformat JSON.
POST /app/streamname?auth=xxx HTTP/1.1 Host: domain Connection: keep-alive Content-Length: 2205 Content-Type: application/jsonCatatanIsi URL signaling pada dasarnya sama dengan URL sumber, kecuali header protokol. URL berikut memberikan contoh:
URL signaling:
https://domain/app/streamname?auth=xxxURL sumber:
artc://domain/app/streamname?auth=xxx
Server mengembalikan respons dengan jawaban SDP.
Setelah server ApsaraVideo Live memverifikasi permintaan, server menghasilkan jawaban SDP dan mengembalikan respons yang berisi informasi tentang node streaming langsung ke klien. Untuk informasi lebih lanjut tentang parameter respons, lihat bagian Definisi Protokol Signaling RTS dari topik ini.
Klien memulai Interactive Connectivity Establishment (ICE).
Setelah klien menerima respons dengan jawaban SDP, tentukan deskripsi sesi dalam objek RTCPeerConnection.
peerConnection.setRemoteDescription(new RTCSessionDescription(answer.jsep));Gunakan objek RTCPeerConnection untuk memulai ICE dan enkripsi Datagram Transport Layer Security (DTLS). Setelah saluran signaling didirikan, klien dapat menarik stream dari ApsaraVideo Live. Dengan cara ini, Anda dapat mengimplementasikan penarikan stream dan pemutaran berdasarkan standar WebRTC.
Klien memulai pemutusan.
Klien mengirim pesan peringatan DTLS yang memulai pemutusan untuk menghentikan ingest atau pemutaran stream.

Contoh Kode untuk Pemutar HTML5
// Buat koneksi peer dan local offer sdp.
peerConnection = new RTCPeerConnection();
peerConnection.onicecandidate = iceCandidateCallback;
peerConnection.ontrack = remoteStreamCallback;
peerConnection.createOffer({ offerToReceiveVideo: true, offerToReceiveAudio: true })
.then(signaling_pull).catch(errorHandler);
// Permintaan tarik stream CDN live post.
function signaling_pull(offer_sdp) {
console.log('local offer sdp', offer_sdp);
peerConnection.setLocalDescription(offer_sdp).then(function() {
// Dapatkan URL tarik stream.
var stream_url = $("#stream_url").val();
console.log("stream url:" , stream_url);
// Tambahkan sdk dan versi protokol.
var protocol_version = 2;
var sdk_version = "0.0.1";
$.ajax({url: stream_url, data: JSON.stringify({
mode: "live",
version: protocol_version,
sdk_version: sdk_version,
jsep:description,
}),
type: "post",
success:function(result){
var signal = JSON.parse(result);
peerConnection.setRemoteDescription(new RTCSessionDescription(signal.jsep)).then(function() {
console.log("get remote answer sdp: ", signal.jsep.sdp);
}).catch(errorHandler);
}});
}).catch(errorHandler);
}
Definisi protokol signaling RTS
Protokol signaling RTS mendirikan koneksi singkat berbasis HTTPS. Protokol ini menggunakan pesan dalam format JSON. Contoh kode:
{
"version":2,
"sdk_version":"0.0.1",
"mode":"live",
"pull_streams":[
{
"url":"artc://your.domain.com/live/testname",
"amsid":[
"rts audio"
],
"vmsid":[
"rts video"
]
}
],
"jsep":{
"type":"offer",
"sdp":"v=0\n\ro=- 6839248142876176651 2 IN IP4 127.0.0.1\n\rs=-\n\r Konten yang dihilangkan"
}
}Pemutaran
Deskripsi Protokol tentang Pemutaran
Tabel 1. Parameter Permintaan
Parameter
Tipe
Diperlukan
Deskripsi
mode
string
Ya
Mode stream. Dalam contoh ini, atur parameter ke live.
version
int
Ya
Versi protokol. Dalam contoh ini, atur parameter ke 2.
push_stream
string
Tidak
URL ingest.
pull_streams
[]object
Tidak
Stream yang ingin Anda tarik. Anda dapat menarik beberapa stream sekaligus. Untuk informasi lebih lanjut tentang atribut parameter pull_stream, lihat tabel berikut.
sdk_version
string
Tidak
Versi SDK.
jsep.type
string
Ya
Tipe pesan SDP. Dalam contoh ini, atur parameter ke offer.
jsep.sdp
string
Ya
Deskripsi pesan SDP.
Tabel 2. Atribut Parameter pull_stream
Atribut
Tipe
Diperlukan
Deskripsi
url
string
Ya
URL sumber yang dimulai dengan
artc://.amsid
[]string
Ya
ID stream media (MSID) dari stream audio yang ingin Anda tarik. Dalam contoh ini, atur parameter ke
rts audio.vmsid
[]string
Ya
MSID dari stream video yang ingin Anda tarik. Dalam contoh ini, atur parameter ke
rts video.Tabel 3. Parameter Respons
Parameter
Tipe
Diperlukan
Deskripsi
code
int
Ya
Kode status HTTP. Jika permintaan berhasil, kode 200 dikembalikan. Untuk informasi lebih lanjut tentang kode status, lihat bagian "Kode status".
trace_id
string
Ya
ID unik global (GUID) dari permintaan. GUID dihasilkan oleh Alibaba Cloud CDN dan dapat digunakan untuk memecahkan masalah. Simpan GUID dengan baik.
jsep.type
string
Ya
Tipe pesan SDP. Dalam contoh ini, nilai answer dikembalikan. .
jsep.sdp
string
Ya
Deskripsi pesan SDP yang dihasilkan ketika node CDN menarik stream dari asal.
Contoh Permintaan Pemutaran
Permintaan: { "version":2, "sdk_version":"0.0.1", "mode":"live", "pull_streams":[ { "url":"artc://your.domain.com/live/testname", "amsid":[ "rts audio" ], "vmsid":[ "rts video" ] } ], "jsep":{ "type":"offer", "sdp":"v=0\n\ro=- 6839248142876176651 2 IN IP4 127.0.0.1\n\rs=-\n\r Konten yang dihilangkan" } } Respons: { "trace_id":"2_1591173296_101.227.0.169_702080732320_dec327eb6eed0e0b07b349c8a5653eca", "code":200, "jsep":{ "type":"answer", "sdp":"v=0\r\no=- 1591173291 2 IN IP4 127.0.0.1\n\r Konten yang dihilangkan" } }sps-pps-idr-in-keyframe: Kami merekomendasikan Anda melakukan operasi berikut untuk mencegah kedipan layar saat browser memutar stream langsung dalam kondisi jaringan yang buruk.
Setelah penawaran SDP dibuat untuk stream yang berlangganan untuk pemutaran HTML5 dan sebelum Anda memanggil setLocalDescription, modifikasi pesan SDP. Temukan baris serupa dengan yang berikut ini tentang atribut video H.264:
a=fmtp:127 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42001fTambahkan sps-pps-idr-in-keyframe=1. Baris tersebut menjadi:
a=fmtp:127 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42001f;sps-pps-idr-in-keyframe=1GRTN merespons dan mengaktifkan fitur tersebut untuk browser.
Penanganan Kesalahan
Jika permintaan penarikan stream valid, kode status HTTP 200 dikembalikan. Hasil penanganan kesalahan bervariasi berdasarkan kode status HTTP yang dikembalikan dalam badan respons berformat JSON. Tabel berikut menunjukkan parameter kode dan pesan dalam respons:
Respons: { "code": 200, // Nilai 200 menunjukkan bahwa permintaan berhasil. Untuk informasi lebih lanjut tentang kode status, lihat bagian "Kode status". "message": "success" // Pesan yang dikembalikan. }Tabel 4. Parameter Respons
Parameter
Tipe
Deskripsi
code
int
Kode status HTTP. Untuk informasi lebih lanjut, lihat bagian "Kode status".
message
string
Pesan yang dikembalikan.
Tabel 5. Kode Status
Kode status
Deskripsi
403
Menunjukkan bahwa autentikasi gagal.
404
Menunjukkan bahwa stream tidak ada.
611
Menunjukkan bahwa klien harus memutar stream melalui TCP.
302
Menunjukkan bahwa klien harus mengirim permintaan ke alamat baru.
Ingest stream
Deskripsi Protokol tentang Ingest Stream
Tabel 6. Parameter Permintaan
Parameter
Tipe
Diperlukan
Deskripsi
mode
string
Ya
Mode stream. Dalam contoh ini, atur parameter ke live.
version
int
Ya
Versi protokol. Dalam contoh ini, atur parameter ke 2.
push_stream
string
Tidak
URL ingest.
sdk_version
string
Tidak
Versi SDK.
jsep.type
string
Ya
Tipe pesan SDP. Dalam contoh ini, atur parameter ke offer.
jsep.sdp
string
Ya
Deskripsi pesan SDP.
Tabel 7. Parameter Respons
Parameter
Tipe
Diperlukan
Deskripsi
code
int
Ya
Kode status HTTP. Jika permintaan berhasil, kode 200 dikembalikan. Untuk informasi lebih lanjut tentang kode status, lihat bagian "Kode status".
trace_id
string
Ya
GUID dari permintaan. GUID dihasilkan oleh Alibaba Cloud CDN dan dapat digunakan untuk memecahkan masalah. Simpan GUID dengan baik.
jsep.type
string
Ya
Tipe pesan SDP. Dalam contoh ini, nilai answer dikembalikan.
jsep.sdp
string
Ya
Deskripsi pesan SDP yang dihasilkan ketika node CDN menarik stream dari asal.
Contoh Permintaan Ingest Stream
Permintaan: { "version":2, "sdk_version":"0.0.1", "mode":"rtc", "push_stream":"artc://host/app/name", "jsep":{ "type":"offer", "sdp":"v=0\r\no=- 1385856200224536561 2 IN IP4 127.0.0.1\r\ns=-\r\nt=0 0\r\na=group:BUNDLE 0 1 2\r\na=extmap-allow-mixed\r\na=msid-semantic: WMS rts\r\nm=audio 9 UDP/TLS/RTP/SAVPF 111 63 103 104 9 0 8 106 105 13 110 112 113 126\r\nc=IN IP4 0.0.0.0\r\na=rtcp:9 IN IP4 0.0.0.0\r\na=ice-ufrag:iQyM\r\na=ice-pwd:D3GXKCcUGvW9djaAozff5ppT\r\na=ice-options:trickle\r\na=fingerprint:sha-256 20:50:72:9B:A2:C0:D8:50:AD:D0:EF:A7:62:8F:EF:C3:AB:86:D5:B6:3E:17:22:69:79:5B:CE:E8:42:33:B5:E4\r\na=setup:actpass\r\na=mid:0\r\na=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level\r\na=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time\r\na=extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01\r\na=extmap:4 urn:ietf:params:rtp-hdrext:sdes:mid\r\na=sendrecv\r\na=msid:rts audio\r\na=rtcp-mux\r\na=rtpmap:111 opus/48000/2\r\na=rtcp-fb:111 transport-cc\r\na=rtcp-fb:111 nack\r\na=fmtp:111 minptime=10;useinbandfec=1\r\na=rtpmap:63 red/48000/2\r\na=fmtp:63 111/111\r\na=rtpmap:103 ISAC/16000\r\na=rtpmap:104 ISAC/32000\r\na=rtpmap:9 G722/8000\r\na=rtpmap:0 PCMU/8000\r\na=rtpmap:8 PCMA/8000\r\na=rtpmap:106 CN/32000\r\na=rtpmap:105 CN/16000\r\na=rtpmap:13 CN/8000\r\na=rtpmap:110 telephone-event/48000\r\na=rtpmap:112 telephone-event/32000\r\na=rtpmap:113 telephone-event/16000\r\na=rtpmap:126 telephone-event/8000\r\na=ssrc:3411287802 cname:s4eR7OuKnnPL0vKS\r\na=ssrc:3411287802 msid:rts audio\r\na=ssrc:3411287802 mslabel:rts\r\na=ssrc:3411287802 label:audio\r\nm=video 9 UDP/TLS/RTP/SAVPF 96 97 98 99 100 101 127 121 125 107 108 109 124 120 123 119 35 36 41 42 114 115 116 117 118\r\nc=IN IP4 0.0.0.0\r\na=rtcp:9 IN IP4 0.0.0.0\r\na=ice-ufrag:iQyM\r\na=ice-pwd:D3GXKCcUGvW9djaAozff5ppT\r\na=ice-options:trickle\r\na=fingerprint:sha-256 20:50:72:9B:A2:C0:D8:50:AD:D0:EF:A7:62:8F:EF:C3:AB:86:D5:B6:3E:17:22:69:79:5B:CE:E8:42:33:B5:E4\r\na=setup:actpass\r\na=mid:1\r\na=extmap:14 urn:ietf:params:rtp-hdrext:toffset\r\na=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time\r\na=extmap:13 urn:3gpp:video-orientation\r\na=extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01\r\na=extmap:5 http://www.webrtc.org/experiments/rtp-hdrext/playout-delay\r\na=extmap:6 http://www.webrtc.org/experiments/rtp-hdrext/video-content-type\r\na=extmap:7 http://www.webrtc.org/experiments/rtp-hdrext/video-timing\r\na=extmap:8 http://www.webrtc.org/experiments/rtp-hdrext/color-space\r\na=extmap:4 urn:ietf:params:rtp-hdrext:sdes:mid\r\na=extmap:10 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id\r\na=extmap:11 urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id\r\na=sendrecv\r\na=msid:rts video\r\na=rtcp-mux\r\na=rtcp-rsize\r\na=rtpmap:96 VP8/90000\r\na=rtcp-fb:96 goog-remb\r\na=rtcp-fb:96 transport-cc\r\na=rtcp-fb:96 ccm fir\r\na=rtcp-fb:96 nack\r\na=rtcp-fb:96 nack pli\r\na=rtpmap:97 rtx/90000\r\na=fmtp:97 apt=96\r\na=rtpmap:98 VP9/90000\r\na=rtcp-fb:98 goog-remb\r\na=rtcp-fb:98 transport-cc\r\na=rtcp-fb:98 ccm fir\r\na=rtcp-fb:98 nack\r\na=rtcp-fb:98 nack pli\r\na=fmtp:98 profile-id=0\r\na=rtpmap:99 rtx/90000\r\na=fmtp:99 apt=98\r\na=rtpmap:100 VP9/90000\r\na=rtcp-fb:100 goog-remb\r\na=rtcp-fb:100 transport-cc\r\na=rtcp-fb:100 ccm fir\r\na=rtcp-fb:100 nack\r\na=rtcp-fb:100 nack pli\r\na=fmtp:100 profile-id=2\r\na=rtpmap:101 rtx/90000\r\na=fmtp:101 apt=100\r\na=rtpmap:127 H264/90000\r\na=rtcp-fb:127 goog-remb\r\na=rtcp-fb:127 transport-cc\r\na=rtcp-fb:127 ccm fir\r\na=rtcp-fb:127 nack\r\na=rtcp-fb:127 nack pli\r\na=fmtp:127 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42001f\r\na=rtpmap:121 rtx/90000\r\na=fmtp:121 apt=127\r\na=rtpmap:125 H264/90000\r\na=rtcp-fb:125 goog-remb\r\na=rtcp-fb:125 transport-cc\r\na=rtcp-fb:125 ccm fir\r\na=rtcp-fb:125 nack\r\na=rtcp-fb:125 nack pli\r\na=fmtp:125 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42001f\r\na=rtpmap:107 rtx/90000\r\na=fmtp:107 apt=125\r\na=rtpmap:108 H264/90000\r\na=rtcp-fb:108 goog-remb\r\na=rtcp-fb:108 transport-cc\r\na=rtcp-fb:108 ccm fir\r\na=rtcp-fb:108 nack\r\na=rtcp-fb:108 nack pli\r\na=fmtp:108 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f\r\na=rtpmap:109 rtx/90000\r\na=fmtp:109 apt=108\r\na=rtpmap:124 H264/90000\r\na=rtcp-fb:124 goog-remb\r\na=rtcp-fb:124 transport-cc\r\na=rtcp-fb:124 ccm fir\r\na=rtcp-fb:124 nack\r\na=rtcp-fb:124 nack pli\r\na=fmtp:124 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42e01f\r\na=rtpmap:120 rtx/90000\r\na=fmtp:120 apt=124\r\na=rtpmap:123 H264/90000\r\na=rtcp-fb:123 goog-remb\r\na=rtcp-fb:123 transport-cc\r\na=rtcp-fb:123 ccm fir\r\na=rtcp-fb:123 nack\r\na=rtcp-fb:123 nack pli\r\na=fmtp:123 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=4d001f\r\na=rtpmap:119 rtx/90000\r\na=fmtp:119 apt=123\r\na=rtpmap:35 H264/90000\r\na=rtcp-fb:35 goog-remb\r\na=rtcp-fb:35 transport-cc\r\na=rtcp-fb:35 ccm fir\r\na=rtcp-fb:35 nack\r\na=rtcp-fb:35 nack pli\r\na=fmtp:35 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=4d001f\r\na=rtpmap:36 rtx/90000\r\na=fmtp:36 apt=35\r\na=rtpmap:41 AV1/90000\r\na=rtcp-fb:41 goog-remb\r\na=rtcp-fb:41 transport-cc\r\na=rtcp-fb:41 ccm fir\r\na=rtcp-fb:41 nack\r\na=rtcp-fb:41 nack pli\r\na=rtpmap:42 rtx/90000\r\na=fmtp:42 apt=41\r\na=rtpmap:114 H264/90000\r\na=rtcp-fb:114 goog-remb\r\na=rtcp-fb:114 transport-cc\r\na=rtcp-fb:114 ccm fir\r\na=rtcp-fb:114 nack\r\na=rtcp-fb:114 nack pli\r\na=fmtp:114 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=64001f\r\na=rtpmap:115 rtx/90000\r\na=fmtp:115 apt=114\r\na=rtpmap:116 red/90000\r\na=rtpmap:117 rtx/90000\r\na=fmtp:117 apt=116\r\na=rtpmap:118 ulpfec/90000\r\na=ssrc-group:FID 4075787827 945566690\r\na=ssrc:4075787827 cname:s4eR7OuKnnPL0vKS\r\na=ssrc:4075787827 msid:rts video\r\na=ssrc:4075787827 mslabel:rts\r\na=ssrc:4075787827 label:video\r\na=ssrc:945566690 cname:s4eR7OuKnnPL0vKS\r\na=ssrc:945566690 msid:rts video\r\na=ssrc:945566690 mslabel:rts\r\na=ssrc:945566690 label:video\r\nm=application 9 UDP/DTLS/SCTP webrtc-datachannel\r\nc=IN IP4 0.0.0.0\r\na=ice-ufrag:iQyM\r\na=ice-pwd:D3GXKCcUGvW9djaAozff5ppT\r\na=ice-options:trickle\r\na=fingerprint:sha-256 20:50:72:9B:A2:C0:D8:50:AD:D0:EF:A7:62:8F:EF:C3:AB:86:D5:B6:3E:17:22:69:79:5B:CE:E8:42:33:B5:E4\r\na=setup:actpass\r\na=mid:2\r\na=sctp-port:5000\r\na=max-message-size:262144\r\n" } } Respons: { "trace_id":"...", "code":200, "jsep":{ "type":"answer", "sdp":"v=0\r\no=- 1657264764 2 IN IP4 127.0.0.1 Konten yang dihilangkan" } }Dalam permintaan signaling sebelumnya, push_stream menunjukkan URL ingest, yang serupa dengan ingest stream melalui Real-Time Messaging Protocol (RTMP). Perhatikan poin-poin berikut:
Anda harus menentukan MSID dalam pesan SDP. GRTN menggunakan MSID untuk mengidentifikasi stream media.
Stream media tidak mendukung negosiasi. Untuk MSID yang ditentukan oleh klien, hanya satu codec yang diizinkan. GRTN tidak membuat pilihan. Codec yang didukung termasuk Advanced Audio Coding (AAC), Opus, H.264, dan H.265.
Contoh Kode untuk Audio


Video


Penanganan Kesalahan
Jika permintaan penarikan stream valid, kode status HTTP 200 dikembalikan. Hasil penanganan kesalahan bervariasi berdasarkan kode status HTTP yang dikembalikan dalam badan respons berformat JSON. Tabel berikut menunjukkan parameter kode dan pesan dalam respons:
Respons: { "code": 200, // Nilai 200 menunjukkan bahwa permintaan berhasil. Untuk informasi lebih lanjut tentang kode status, lihat bagian "Kode status". "message": "success" // Pesan yang dikembalikan. }Tabel 8. Parameter Respons
Parameter
Tipe
Deskripsi
code
int
Kode status HTTP. Untuk informasi lebih lanjut, lihat bagian "Kode status".
message
string
Pesan yang dikembalikan.
Tabel 9. Kode Status
Kode status
Deskripsi
403
Menunjukkan bahwa autentikasi gagal.
611
Menunjukkan bahwa klien harus memutar stream melalui TCP.
302
Menunjukkan bahwa klien harus mengirim permintaan ke alamat baru.
Negosiasi SDP yang ditingkatkan
Pesan dipertukarkan dalam format SDP selama signaling. Negosiasi SDP umumnya didasarkan pada RFC 4566. RTS memperluas lebih banyak semantik untuk membuat negosiasi kompatibel dengan karakteristik industri streaming langsung. RTS mendukung lebih banyak format kontainer video dan audio serta lebih banyak protokol komunikasi. Dengan cara ini, RTS menyelesaikan masalah bahwa WebRTC hanya mendukung format Opus untuk audio dan tidak mendukung B-frame. RTS memenuhi kebutuhan protokol streaming yang terus meningkat.
AAC didukung untuk ingest dan penarikan stream
RTS dapat mentransmisikan audio dalam berbagai format AAC melalui RTMP. Format AAC termasuk AAC-LC, HE-AACv1, dan HE-AACv2.
RTS dapat mentransmisikan audio dalam format AAC menggunakan container Low-overhead MPEG-4 Audio Transport Multiplex (LATM). LATM menentukan apakah informasi pengkodean tentang audio ditransmisikan dalam mode in-band atau out-of-band berdasarkan apakah audio mengandung informasi pengkodean. Transmisi in-band mengirimkan informasi pengkodean untuk setiap frame audio. Transmisi out-of-band mengirimkan informasi pengkodean hanya sekali. Parameter muxconfigPresent dalam array AudioMuxElement menentukan apakah informasi dalam AudioSpecificConfig ditransmisikan dalam mode in-band atau out-of-band. Oleh karena itu, LATM lebih fleksibel daripada Audio Data Transport Stream (ADTS). Jika informasi dalam AudioSpecificConfig tetap tidak berubah, informasi dalam StreamMuxConfig dapat pertama kali ditransmisikan dalam pesan SDP.
AAC Didukung untuk Ingest Stream
Anda dapat memberi tahu server tentang format audio AAC dengan membawa informasi terkait dalam penawaran SDP. Selain itu, Anda dapat menambahkan config=StreamMuxConfig, yang diperoleh dari AudioSpecificConfig dari stream yang diingest, dalam atribut fmtp. Dengan cara ini, parameter AudioSpecificConfig dapat dibawa ke server untuk menghasilkan header AAC.
Penawaran SDP
a=rtpmap:125 MP4A-LATM/48000/2 a=fmtp:125 config=4000232000;cpresent=0;object=2;profile-level-id=1AAC Didukung untuk Penarikan Stream
Selama signaling, RTS menguraikan informasi pengkodean selama ingest stream audio dan mengembalikan informasi yang diuraikan dalam respons negosiasi, seperti yang ditunjukkan dalam kode berikut.
Penawaran SDP
Jawaban SDP
AAC-LC
HE-AACv1
HE-AACv2
m=audio 9 UDP/RTP/AVPF 120 96 a=rtpmap:120 MP4A-LATM/44100/2AudioSpecificConfig = 0x1210AudioSpecificConfig = 2b920800AudioSpecificConfig = eb8a0800a=rtpmap:120 MP4A-LATM/44100/2 a=fmtp:120 cpresent=0;profile-level-id=1;object=2;config=400024203fc0a=rtpmap:120 MP4A-LATM/44100/2 a=fmtp:120 cpresent=0;profile-level-id=1;object=2;config=4000572410003fc0;SBR-enabled=1a=rtpmap:120 MP4A-LATM/44100/2 a=fmtp:120 cpresent=0;object=2;profile-level-id=1;config=4001d71410003fc0;PS-enabled=1;SBR-enabled=1Jika
SBR-enabled=1ditambahkan dalam atribut fmtp dari MP4A-LATM, format AAC adalah AAC-HE. JikaSBR-enabled=1danPS-enabled=1ditambahkan, format AAC adalah HE-AACv2. Format AAC berevolusi dari AAC-LC ke HE-AACv2. Oleh karena itu, bidang SBR dan PS dapat digunakan dalam atribut fmtp untuk menunjukkan format AAC. Selain itu, Anda dapat menambahkanconfig=StreamMuxConfigdalam atribut fmtp. StreamMuxConfig diperoleh dari AudioSpecificConfig dari stream yang diingest dan berisi parameter yang terkait dengan detail informasi pengkodean. Klien dapat memperoleh detail sesuai kebutuhan.
H.265 didukung untuk ingest dan penarikan stream
H.265 Didukung untuk Ingest Stream
Anda dapat memberi tahu server tentang format video H.265 dengan membawa informasi terkait dalam penawaran SDP.
Penawaran SDP:
a=rtpmap:102 H265/90000H.265 Didukung untuk Penarikan Stream
Selama proses signaling penarikan stream, server memperoleh codec video dari stream sumber, seperti H.264, H.265, dan melakukan negosiasi berdasarkan informasi tersebut.
Penawaran SDP
Jawaban SDP
a=rtpmap:102 H265/90000a=rtpmap:122 H265/90000 a=fmtp:122
B-frame didukung untuk ingest dan penarikan stream
B-frame Didukung untuk Ingest Stream
B-frame didukung dalam stream yang diingest.
B-frame Didukung untuk Penarikan Stream
Selama signaling, klien dapat menambahkan bidang dalam penawaran SDP untuk menentukan apakah akan mendekode video yang mengandung B-frame. Sebagai contoh, jika klien menambahkan
BFrame-enabled = 1dalam atribut fmtp, klien dapat mendekode video yang mengandung B-frame. Dalam hal ini,RTP timestamp = PTSdapat ditambahkan, yang berarti bahwa klien mendekode setiap frame berdasarkan urutan nomor yang meningkat. Jika video yang mengandung B-frame tidak didukung, RTS dapat mentranskode stream sumber untuk menghapus B-frame.Untuk mendekode video yang mengandung B-frame, "RTP timestamp = PTS" dapat ditambahkan. Klien mendekode setiap frame berdasarkan urutan nomor yang meningkat.
Selain itu, server dapat mengembalikan composition timestamp (CTS). Ini memungkinkan klien menghitung decoding timestamp (DTS) berdasarkan rumus berikut: Presentation timestamp (PTS) = DTS + CTS. Jika penawaran SDP berisi
a=extmap:{$id} uri:webrtc:rtc:rtp-hdrext:video:CompositionTime, RTS menambahkanextension identifier = {$id}ke paket Real-time Transport Protocol (RTP) pertama dari setiap frame video. Nilai variabelidditentukan oleh penawaran SDP yang dikirim oleh klien.RTS memungkinkan klien menentukan apakah akan mendekode video yang mengandung B-frame dan apakah akan mengembalikan informasi CTS. RTS menghargai metode umum dalam komunikasi sejak awal.
Gambar berikut menunjukkan konten sebagian dari penawaran SDP dan capture paket selama penarikan stream:


Permintaan signaling yang membawa metadata didukung untuk ingest stream
Stream yang diingest melalui RTMP membawa metadata, yang dapat digunakan untuk mengembalikan callback dan menyediakan informasi untuk klien penarikan stream. Namun, proses signaling WebRTC tidak melibatkan metadata. Sebagai solusi perbaikan, RTS memungkinkan metadata dibawa dalam permintaan signaling. Dengan cara ini, metadata dapat dihasilkan dalam stream yang diingest.
Tambahkan bidang metadata ke badan permintaan signaling untuk stream yang diingest:
{
"version":2,
"sdk_version":"0.0.1",
"mode":"rtc",
"push_stream":"artc://host/app/name",
"jsep":{
"type":"offer",
"sdp":"..."
},
"metadata":{
"framerate":"20",
"platform":"iOS",
"audiodatarate":"200",
"videodatarate":"2000"
}
}Mekanisme MSID
Untuk informasi lebih lanjut tentang MSID, lihat Mekanisme Msid. Perhatikan konten berikut.