ffmpeg muxing到mkv容器

时间:2017-05-23 13:54:02

标签: ffmpeg rtp pts

我正在使用来自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); 
  • 最后的时间戳是以微秒为单位(第一个参数)理论上它是NTP来源。
  • 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。

0 个答案:

没有答案