学习FFmpeg个人认为是不需要买书的,只需利用好下面四种资源
1.优秀的博客,比如雷神的博客:https://blog.csdn.net/leixiaohua1020
2.FFmppeg的exanmples:FFmpeg: Examples
3.优秀的开源播放器,比如VLC、MPlayer、MPV、QtAV等
4.FFmpeg的源码
当然最重要的是自己要尝试用FFmpeg去做一个基本功能完整的播放器,以做带学。如果身边有老鸟、大神相助就再好不过了。
博主本人喜欢听歌,播放器做好后,就试了试mp3和wav,都可以正常播放,然后再找来个ape,却不能正常播放,这时候只能去查找ape播放失败的原因,原来是因为ape格式音频几个frame仅有一个有效时间戳,所以需要给无时间戳的frame计算时间戳。这就是一个以做带学的真实案例。
如果想使音频播放界面更加酷炫,可以添加音频频谱,详见:
Qt之调用FFTW3实现音频频谱(原理)
Qt之调用FFTW3实现音频频谱(实现)
FFmpeg4都发布四年多了,现在学当然是从FFmpeg4开始,网上大多数资料都是几年前的,用到了很多FFmpeg4中已经废弃的函数,按照网上的教程来写代码会遇到各种问题,所以本专栏应运而生,用比较新的API来实现一些常用的功能。
播放器做好了之后,需要找一些音视频文件来测试其解码能力,https://samples.mplayerhq.hu是一个不错的选择,samples.mplayerhq.hu站点上的文件就是大名鼎鼎MPlayer提供的用来测试MPlayer解码能力的测试样本,里面各种格式的文件都有,并且每个文件都不太大,用来测试我们的程序最合适不过了。
FFmpeg自带的ffprobe可以非常有用的流媒体分析工具,使用ffprobe可以查看流媒体中包含的容器,以及容器中包含的流媒体的格式和类型,可用于辅助代码调试。当然通过下述代码也可以打印流媒体信息,与使用ffprobe得到的结果是一样的。
int main()
{
const char *fileName = "C:\\Users\\zhang\\Videos\\west.mp4";
AVFormatContext *formatCtx = avformat_alloc_context();
avformat_open_input(&formatCtx, fileName, nullptr, nullptr);
avformat_find_stream_info(formatCtx, nullptr);
av_dump_format(formatCtx, 0, fileName, 0);
avformat_close_input(&formatCtx);
avformat_free_context(formatCtx);
}
PS:本专栏订阅后提供源码
原文链接:https://blog.csdn.net/caoshangpa/article/details/124989139