私は現在、RTP経由のビデオストリーミングソリューションでFFmpegを扱っています。どのようなバグを私は正しいフレームレートでストリーミングする方法です。現在、私はメインストリーミングループでスリープを使用しています。ファイルからネットワークへのFFmpegビデオ
while (av_read_frame (input_format_ctx, &packet) >= 0) { // Read a video packet as long as EOF is not reached or an error occurr
if(packet.stream_index == 0) {
if (av_interleaved_write_frame(output_format_ctx, &packet) < 0) { // Write the packet to the output stream
av_packet_unref(&packet); // Wipe the packet
av_free_packet(&packet); // Release the packet and finishes if a problem occured
break;
}
av_packet_unref(&packet); // Wipe the packet
av_free_packet(&packet); // Release the packet
}
current_time = getSystemTime(); // Get system time
adaptativeSleep ((last_time + 1/(output_framerate)) - current_time); // Sleep according to framerate
last_time = getSystemTime(); // Get finish
}
FFmpegでフレームレートを処理させる正しい方法はありますか?事前に
おかげ
P.S:私はFFmpegのが私の「スリープ」witought数秒でファイルを通る結果として、ストリームをリマックス。
私はこの戦略を再実装します。私はチュートリアルで、ストリームとコンテキスト(AVRational)に情報を渡すことができることを確認しました。あなたは私にlibavを任せることができると思いますか?または手動で眠ることは唯一の選択肢ですか? – caiomcg
あなたがこの戦略の例を持ち、それを共有することができたら、私は多くのことを感謝します! – caiomcg
'ffmpeg'コマンドは、特定のスイッチでAPIを処理しますが、APIを処理する必要があります。自分の時刻がシステムクロックよりも遅くなるまでパケットを保持してください。再生時にオーディオ、ビデオ、サブタイトルストリームを同期させるときも同様の方法を使用します。非常に多くのパケットをバッファに入れ、解放されたときにのみ読み込みます。 – WLGfx