想象一下,我有來自實時對話的H.264 AnxB幀。在保留後續播放的定時信息的同時封裝在MPEG2傳輸流中的最佳方式是什麼?在MPEG2傳輸流中封裝H.264流可變幀率
我正在使用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);
我基本上有兩個問題:
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;預先設定爲 ?換句話說,表明空間分辨率可以在中游改變。
非常感謝, 埃迪