このトピックでは、LiveChannelに関するよくある質問に対する回答を提供します。
ストリーム取り込みのプロセス
詳細については、「PutLiveChannel」および「PutLiveChannelStatus」をご参照ください。
生成されたM3U8オブジェクトにLiveChannelに取り込まれたすべてのデータが含まれていない場合はどうすればよいですか?
原因: HTTPライブストリーミング (HLS) プロトコルのデフォルトルールに基づいて、生成されたM3U8オブジェクトには最後の3つのTSオブジェクトのみが含まれます。
解決策: PostVodPlaylist操作を呼び出して、指定された時間範囲内に生成されたTSオブジェクトをM3U8オブジェクトに収束します。
EndTime
の値は、StartTime
の値より大きくなければなりません。 EndTimeとStartTimeの間の期間は1日未満でなければなりません。- OSSは、指定された時間範囲内に指定されたすべてのLiveChannelsに取り込まれたストリームによって生成されたすべてのTSオブジェクトを照会し、これらのオブジェクトをM3U8プレイリストオブジェクトに収束します。
M3U8オブジェクトの生成に失敗した場合はどうすればよいですか?
原因: ストリーム内のデータがObject Storage Service (OSS) に完全に取り込まれていません。
解決策: クライアントでパケットをキャプチャして、「publish success」メッセージが返されたかどうかを確認します。 このメッセージは、ストリーム内のデータがOSSに完全にアップロードされたことを示します。 メッセージが返されてもM3U8オブジェクトが生成されない場合は、クライアントから送信されたパケットを分析して原因を特定します。
クライアントがOSSにストリームを取り込むことができない場合はどうすればよいですか?
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
- 元のコマンドを使用して、追加のパラメーターを設定せずにストリームを取り込みます。
- ストリームの取り込みに使用するURLにアンパサンド (&) が含まれている場合は、URLを引用符 ("") で囲みます。 例:
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"
- OBSを使用してストリームを取り込み、問題がFFMpegによるものかどうかを確認します。
取り込みストリームのレイテンシが高い場合は、PutLiveChannel操作を呼び出すときにFragDurationおよびFragCountパラメーターの値を調整します。
生成されたM3U8オブジェクトを再生するときにラグが発生した場合はどうすればよいですか?
Typeの値がHLSの場合、現在のTSオブジェクトのビデオまたはオーディオデータの期間がFragDuration
の値に達すると、次のキーフレームが受信されたときに新しいTSオブジェクトが生成されます。 OSSは、次のTSファイルを作成する前に、特定の期間 (max(2 * FragDuration、60s)
で計算) 、次のキーフレームを待ちます。 次のキーフレームが期間内に受信されない場合、OSSは新しいTSオブジェクトを作成し、新しいTSオブジェクトを使用してストリームにデータを格納します。 この場合、ラグが発生します。
生成されたM3U8オブジェクトにオーディオまたはビデオデータが含まれていない場合はどうすればよいですか?
原因:
AVCヘッダー
またはAACヘッダー
は送信されません。 クライアントから送信されたパケットをキャプチャして、2つのヘッダーが送信されたかどうかを確認できます。RTMPメッセージ
の長さが2より短いか、シーケンスヘッダ
の長さが短すぎます。- オーディオデータの
Message
のサイズがキャッシュサイズを超えています。 codec_ctx
パラメーターで指定されたオーディオまたはビデオデータが正しくありません。
FFMpegを使用してOSSにアップロードされたビデオにオーディオデータが含まれていない場合はどうすればよいですか?
解決策:
- FFMpegによって生成されたログを表示して、
aac_header
が送信されているかどうかを確認します。 - クライアントから送信されたRTMPパケットをキャプチャして、
aac_header
が送信されているかどうかを確認します。