このトピックでは、LiveChannel に関するよくある質問とその回答を説明します。
ストリームインジェストのプロセス
次の図は、LiveChannel のストリームインジェストプロセスを示しています。このプロセスを理解すると、トラブルシューティングに役立ちます。
詳細については、「PutLiveChannel」および「PutLiveChannelStatus」をご参照ください。
生成された M3U8 オブジェクトに、LiveChannel にインジェストされたすべてのデータが含まれていない場合はどうすればよいですか。
原因: HTTP Live Streaming (HLS) プロトコルのデフォルトルールに基づき、生成される M3U8 オブジェクトには、最後の 3 つの TS オブジェクトのみが含まれます。
解決策: PostVodPlaylist オペレーションを呼び出して、指定された時間範囲内に生成された TS オブジェクトを M3U8 オブジェクトにまとめます。
-
EndTimeはStartTimeより後の時刻である必要があり、期間は 1 日を超えることはできません。 -
OSS は、指定された時間範囲内に、指定された LiveChannel のストリームインジェストによって生成されたすべての ts ファイルを照会し、プレイリストにアセンブルします。
M3U8 オブジェクトの生成に失敗した場合はどうすればよいですか。
原因: ストリーム内のデータが Object Storage Service (OSS) に完全にインジェストされていません。
解決策: クライアントでパケットキャプチャを実行し、"publish success" メッセージが返されるかどうかを確認します。このメッセージは、ストリーム内のデータが OSS に完全にアップロードされたことを示します。メッセージが返されても M3U8 オブジェクトが生成されない場合は、クライアントから送信されたパケットを分析して原因を特定します。
クライアントがストリームを OSS にインジェストできない場合はどうすればよいですか。
たとえば、次のコマンドを使用して FFmpeg でストリームをインジェストできない場合:
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
解決策:
-
FFmpeg を使用してストリームをインジェストできない場合は、複雑なパラメーターなしで基本的なコマンドを使用してみてください。
-
ストリームインジェスト URL にアンパサンド (&) が含まれている場合は、URL 全体を二重引用符 ("") で囲んでください。例:
"rtmp://xxx.oss-cn-beijing.aliyuncs.com/live/test_1000?Expires=1540458859&OSSAccessKeyId=LTAlujianb****&Signature=qwh31xQsanmao6ygCFJgo****%3D&playlistName=playlist.m3u8"。 -
OBS Studio を使用してストリームインジェストを試して、問題が FFmpeg に固有のものであるかどうかを判断してください。
ストリームインジェストの開始後に発生する高レイテンシーを削減するには、PutLiveChannel API の FragDuration および FragCount パラメーターを調整してください。
生成された M3U8 オブジェクトの再生時にラグが発生する場合はどうすればよいですか。
ストレージ形式が HLS の場合、現在の .ts ファイルに書き込まれたオーディオおよびビデオデータのデュレーションが FragDuration で指定されたデュレーションに達した後、OSS は次のキーフレームを受信すると、次の .ts ファイルに切り替えます。次のキーフレームが max(2*FragDuration, 60s) 以内に受信されない場合、OSS は強制的にファイルを切り替えるため、再生のカクつきが発生する可能性があります。
生成された M3U8 オブジェクトにオーディオデータまたはビデオデータが含まれていない場合はどうすればよいですか。
原因:
-
AVC headerまたはAAC headerがありません。パケットキャプチャで確認してください。 -
RTMP messageの長さが 2 未満であるか、sequence headerが小さすぎます。 -
オーディオ
Messageサイズがバッファー容量を超えています。 -
codec_ctxパラメーターには、デコードコンテキストが含まれています。そのオーディオまたはビデオデータが異常な場合、録画が失敗する可能性があります。
FFmpeg を使用して OSS にアップロードしたビデオにオーディオデータが含まれていない場合はどうすればよいですか。
解決策:
-
FFmpeg ログを確認して、クライアントが
aac_headerを送信したかどうかを確認してください。 -
クライアントで RTMP パケットをキャプチャして、
aac_headerが送信されたかどうかを確認してください。
FFmpeg ログは、オーディオストリームが識別子 0x000A の aac (LC) としてエンコードされていることを示しており、これはクライアントが 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