H.264 AnxB フレームがリアルタイムの会話から入ってくると想像してください。後続の再生のタイミング情報を維持しながら、MPEG2 トランスポート ストリームにカプセル化する最良の方法は何ですか?
libavcodec および libavformat ライブラリを使用しています。AVCodecContext 型のオブジェクト (*pcc) へのポインタを取得したら、foll を設定します。
pcc->codec_id = CODEC_ID_H264;
pcc->bit_rate = br;
pcc->width = 640;
pcc->height = 480;
pcc->time_base.num = 1;
pcc->time_base.den = fps;
NAL ユニットを受信したら、AVPacket を作成し、av_interleaved_write_frame() を呼び出します。
AVPacket pkt;
av_init_packet( &pkt );
pkt.flags |= AV_PKT_FLAG_KEY;
pkt.stream_index = pst->index;
pkt.data = (uint8_t*)p_NALunit;
pkt.size = len;
pkt.dts = AV_NOPTS_VALUE;
pkt.pts = AV_NOPTS_VALUE;
av_interleaved_write_frame( fc, &pkt );
基本的に2つの質問があります:
1) 可変フレームレートの場合、フォールを指定しない方法はありますか? pcc->time_base.num = 1; pcc->time_base.den = fps; 可変フレームレートを示すものに置き換えますか?
2) パケットを送信する際、pkt.dts と pkt.pts にどの「タイムスタンプ」を割り当てるべきですか?
現在、ffplay を使用して出力を再生すると、上記のコードで使用する一定のフレームレート (fps) で再生されます。
また、さまざまな空間解像度に対応する方法を知りたいです。私が受信したストリームでは、各キーフレームの前に SPS と PPS があります。空間解像度が変わるときはいつでも知っています。pcc->width = 640; を指定する必要がない方法はありますか? pcc->高さ = 480; 前もって?つまり、空間解像度がストリームの途中で変化する可能性があることを示します。
どうもありがとう、エディ