ffmpeg关于avformat_write_header改变流时间基time_base的说明

本文讲述了作者在使用FFmpeg进行直播推流时遇到的问题,视频播放过快、音频时长缩短。通过深入分析发现时间基被错误改变,并解决了与封装格式mp4和flv相关的时基问题。

最近在用ffmpeg做直播推流功能,之前做的本地录制,封装格式是mp4,直播的时候,mp4不支持,需要改为flv,但是改为flv之后,用ffmpeg命令行进行拉流,拉下来的流存储成flv文件。播放起来,视频显得特别快,原本2分钟的视频,10秒不到就播放完了。

为此将音频和视频单独推流,视频没问题,音频出了问题,录制4分钟的音频,在文件中大概只有2分钟。

下面是用ffmpeg拉流时的命令行,从红色方框可以看出,1分钟拉下来的流不到30ms。正常情况下,这个speed应该在比1大一点点。

在这里插入图片描述

下面一个正常拉流情况下的speed值。
在这里插入图片描述

为此用ffmpeg命令行推流试了下,ffmpeg命令行推流是ok的,然后调试ffmpeg工具,如何调试,本人写了博客。
vs2017调试ffmpeg源码

经过一段时间,发现,问题出在avformat_write_header函数上,在write之前,已经对avformat_new_stream的AVStream做了time_base设置,设置为1/48000,跟音频的采样率保持一致。
但是avformat_write_header之后,time_base变成了1/1000。

封装格式为mp4的时候,不会出现这种情况,看来应该是跟封装格式有关。
下面的图片来自博客ffmpeg # 各种封装格式的time_base

在这里插入图片描述

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值