Topik ini menyediakan jawaban atas pertanyaan umum mengenai LiveChannel.
Proses pengambilan aliran
Diagram berikut menggambarkan proses pengambilan aliran LiveChannel. Memahami proses ini membantu dalam troubleshooting.
Untuk informasi lebih lanjut, lihat PutLiveChannel dan PutLiveChannelStatus.
Apa yang harus saya lakukan jika objek M3U8 yang dihasilkan tidak berisi semua data yang dimasukkan ke LiveChannel?
Penyebab: Berdasarkan aturan bawaan protokol HTTP Live Streaming (HLS), objek M3U8 yang dihasilkan hanya berisi tiga objek TS terakhir.
Solusi: Panggil operasi PostVodPlaylist untuk mengonversikan objek TS yang dihasilkan dalam rentang waktu tertentu ke dalam objek M3U8.
-
EndTimeharus lebih akhir daripadaStartTime, dan rentang waktunya tidak boleh melebihi satu hari. -
OSS mengkueri semua file ts yang dihasilkan oleh pengambilan aliran dari LiveChannel yang ditentukan dalam rentang waktu tersebut dan merangkainya menjadi playlist.
Apa yang harus saya lakukan jika objek M3U8 gagal dibuat?
Penyebab: Data dalam aliran belum sepenuhnya dimasukkan ke Object Storage Service (OSS).
Solusi: Lakukan penangkapan paket pada client untuk memeriksa apakah pesan "publish success" dikembalikan. Pesan ini menandakan bahwa data dalam aliran telah sepenuhnya diunggah ke OSS. Jika pesan tersebut dikembalikan tetapi objek M3U8 tidak dibuat, analisis paket yang dikirim dari client untuk menemukan penyebabnya.
Apa yang harus saya lakukan jika client tidak dapat memasukkan aliran ke OSS?
Misalnya, Anda gagal memasukkan aliran menggunakan FFmpeg dengan perintah berikut:
ffmpeg -re -i 0_20180525105430445.aac -acodec aac -strict -2 -f flv rtmp://xxx.oss-cn-beijing.aliyuncs.com/live/test_1000?Expires=1540458859&OSSAccessKeyId=LTAlujianb****&Signature=qwh31xQsanmao6ygCFJgo****%3D&playlistName=playlist.m3u8
Solusi:
-
Jika Anda tidak dapat memasukkan aliran menggunakan FFmpeg, coba gunakan perintah dasar tanpa parameter kompleks.
-
Jika URL pengambilan aliran berisi tanda ampersand (&), sertakan seluruh URL dalam tanda kutip ganda (""). Contohnya:
ffmpeg -re -i 0_20180525105430445.aac -acodec aac -strict -2 -f flv "rtmp://xxx.oss-cn-beijing.aliyuncs.com/live/test_1000?Expires=1540458859&OSSAccessKeyId=LTAlujianb****&Signature=qwh31xQsanmao6ygCFJgo****%3D&playlistName=playlist.m3u8". -
Coba gunakan OBS Studio untuk pengambilan aliran guna menentukan apakah masalah tersebut spesifik pada FFmpeg.
Untuk mengurangi latensi tinggi setelah pengambilan aliran dimulai, sesuaikan parameter FragDuration dan FragCount pada operasi PutLiveChannel.
Apa yang harus saya lakukan jika terjadi lag saat memutar ulang objek M3U8 yang dihasilkan?
Ketika format penyimpanan adalah HLS, setelah durasi data audio dan video yang ditulis ke file .ts saat ini mencapai durasi yang ditentukan oleh FragDuration, OSS beralih ke file .ts berikutnya ketika menerima frame kunci berikutnya. Jika frame kunci berikutnya tidak diterima dalam waktu max(2*FragDuration, 60s), OSS akan memaksa pergantian file, yang dapat menyebabkan pemutaran tersendat.
Apa yang harus saya lakukan jika objek M3U8 yang dihasilkan tidak berisi data audio atau video?
Penyebab:
-
AVC headeratauAAC headertidak ada. Lakukan penangkapan paket untuk memverifikasi. -
Panjang
RTMP messagekurang dari 2, atausequence headerterlalu kecil. -
Ukuran
Messageaudio melebihi kapasitas buffer. -
Parameter
codec_ctxberisi konteks decoding. Jika data audio atau videonya abnormal, perekaman dapat gagal.
Apa yang harus saya lakukan jika video yang diunggah ke OSS menggunakan FFmpeg tidak berisi data audio?
Solusi:
-
Periksa log FFmpeg untuk memastikan apakah client mengirim
aac_header. -
Lakukan penangkapan paket RTMP pada client untuk melihat apakah
aac_headertelah dikirim.
Log FFmpeg menunjukkan bahwa aliran audio dikodekan sebagai aac (LC) dengan identifikasi 0x000A, yang mengonfirmasi bahwa client telah mengirim aac_header:
Stream #0:0, 0, 1/1000
: Video: h264 (High), 1 reference frame ([7][0][0][0] / 0x0007), yuv420p(progressive, left), 544x...
18 fps, 18 tbr, 1k tbn,
1k tbc
Stream #0:1, 0, 1/1000: Audio: aac (LC) ([10][0][0][0] / 0x000A), 48000 Hz, mono, fltp
Stream mapping:
(copy)
cur_dts is invalid (this is harmless if it occurs once at the start per stream)
Last message repeated 2 times