我正在使用来自RTP流的alaw音频帧复用H264帧,但是我在为mkv容器设置fps时遇到了一些问题。
对于AVPacket :: pts我正在使用计算的演示时间(来自RTCP SR报告) 我按如下方式重新缩放它们(我假设音频完全一样):
pkt.pts = av_rescale_q(s_video_sync.fSyncTime.tv_sec * 1000000 + s_video_sync.fSyncTime.tv_usec,
av_encode_codec_ctx->time_base, video_st->time_base);
av_encode_codec_ctx->time_base
设置为{1,fps}
,其中fps取决于流,让我们说5
video_st->time_base
自动转到{1,1000}
(我认为这是由mkv容器强制执行的)我认为这应该设置为te rescale功能(至少这是示例所示),但ffprobe显示持续时间的奇怪读数,fps设置为1k ......并且视频播放很奇怪。 / p>
我的问题是我应该如何处理这个问题? 我应该重新调整时间戳,从第一个数据包的0开始计数,或者我弄乱了两个不同的时域,因此muxer无法弄清楚该做什么?
EDIT1 :
我已经发现,由于时间戳是微秒(而且我不是编码),我应该使用{1,1000000}
作为pts calc的时基而不是编解码器的时基。现在至少持续时间是正常的,音频播放顺畅,但视频“波涛汹涌”,视频中有一个时间戳不能平滑增加...而且fps仍然是1k
EDIT2 似乎在手动之后(可能应该是首先设置的那样)设置以下内容:
video_st->avg_frame_rate = (AVRational){ 90000, 90000/u8fps };
av_stream_set_r_frame_rate(video_st, (AVRational){ 90000, 90000/u8fps });
其中u8fps
是假定的每秒帧速率,90000
是视频的标准采样率(90kHz滴答)视频播放流畅。
此致 的Pawel。