リアルタイムの会話からH.264 AnxBフレームを受信したとします。次の再生のタイミング情報を維持しながらMPEG2トランスポートストリームにカプセル化する最良の方法は何ですか?H.264ストリームをカプセル化するMPEG2トランスポートストリームで可変フレームレートを使用する
私はlibavcodecとlibavformatライブラリを使用しています。 AVCodecContext型のオブジェクト(* pcc)へのポインタを取得すると、私はそのオブジェクトを設定します。
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)変数フレームレートに関しては、follを指定しないようにする方法があります。 pcc-> time_base.num = 1; pcc-> time_base.den = fps; これを可変フレームレートを示す何かに置き換えますか?
2)パケットを送信しているうちに、 pkt.dtsとpkt.ptsにどのタイムスタンプを割り当てる必要がありますか?
現時点では、ffplayを使用して出力を再生すると、上記のコードで使用する一定のフレームレート(fps)で再生しています。
さまざまな空間解像度に対応する方法も知りたいです。私が受け取るストリームでは、各キーフレームの前にSPSとPPSがあります。空間解像度が変わるたびに私は知っています。 ここに指定する必要はありません。 pcc-> width = 640; pcc-> height = 480; upfront?換言すれば、空間分解能が中間ストリームに変化し得ることを示す。
どうもありがとう、 エディ