ffmpeg tutorial3 杂音
2015-12-04 16:11
225 查看
开始接触学习ffmpeg,ffmpeg tutorial 是不错的入门教程,但ffmpeg tutorial3声音无法正常播放。
由于刚接触ffmpeg,无从下手,只能按以前的调试习惯,单独调试音频部分,发现播放wav文件时正常,播放mp3有杂音但不像播放电影文件时那样全是杂音。此时,心里隐隐感觉有点眉目,但又不清楚问题在哪里,后在网上查找资料,终于找到篇帖子便是对这个问题的说明:
http://bbs.csdn.net/topics/390700255?page=1
原来,ffmpeg新的版本,音频也像视频那样分为packed、plannar存储格式(描述可能不准确,大概是这种意思),于是便有了思路。
参考上面那篇帖子,对ffmpeg tutorial3进行了修改,果然声音正常了,特此做下笔记:
对audio_decode_frame做如下修改:
ffmpeg tutorial3 点击打开链接
由于刚接触ffmpeg,无从下手,只能按以前的调试习惯,单独调试音频部分,发现播放wav文件时正常,播放mp3有杂音但不像播放电影文件时那样全是杂音。此时,心里隐隐感觉有点眉目,但又不清楚问题在哪里,后在网上查找资料,终于找到篇帖子便是对这个问题的说明:
http://bbs.csdn.net/topics/390700255?page=1
原来,ffmpeg新的版本,音频也像视频那样分为packed、plannar存储格式(描述可能不准确,大概是这种意思),于是便有了思路。
参考上面那篇帖子,对ffmpeg tutorial3进行了修改,果然声音正常了,特此做下笔记:
对audio_decode_frame做如下修改:
<pre name="code" class="cpp">if(got_frame) { data_size = av_samples_get_buffer_size(NULL, av_frame_get_channels(&frame), frame.nb_samples, frame.format, 0); assert(data_size <= buf_size); if(frame.channels > 0 && frame.channel_layout == 0) frame.channel_layout = av_get_default_channel_layout(frame.channels); else if(frame.channels == 0 && frame.channel_layout > 0) frame.channels = av_get_channel_layout_nb_channels(frame.channel_layout); { if( swr_ctx ) { swr_free(swr_ctx); swr_ctx = NULL; } swr_ctx = swr_alloc_set_opts(NULL, wanted_frame.channel_layout, wanted_frame.format, wanted_frame.sample_rate, frame.channel_layout, frame.format, frame.sample_rate, 0, NULL); if( !swr_ctx || swr_init(swr_ctx) < 0) { fprintf(stderr, "swr_init() failed\n"); break; } int len2 = swr_convert(swr_ctx, &audio_buf, buf_size / wanted_frame.channels / av_get_bytes_per_sample(wanted_frame.format), frame.data, frame.nb_samples); if( len2 < 0 ) { fprintf(stderr, "swr_convert failed\n"); break; } return wanted_frame.channels * len2 * av_get_bytes_per_sample(wanted_frame.format); } }
ffmpeg tutorial3 点击打开链接
相关文章推荐
- vim加载systemverilog语法高亮
- 获取mysqli函数的值和字段名
- 常用前端插件推荐
- Linux学习笔记(一)
- React Native Android 组件IntentAndroid 实现拨打电话
- 设计模式系列(五)工厂方法模式(Factory Method Pattern)
- 转:关于setNeedsDisplay和setNeedsLayout
- JPA性能调优会需要特别注意的2点
- Target runtime Apache Tomcat 6.0 is not defined
- php myeclipse 软件的下载、安装,环境的搭建、配置
- iOS 天气应用代码中文介绍
- 滚动消息栏
- iOS开发-多线程-简介
- C#编写QQ找茬外挂
- 金典之数组与字符串
- [CSS3] 渐进增强 & 优雅降级
- 为CRM系统中常见数据类型进行赋值(statecode)
- Android 控件GridView的使用
- Jquery.mask.js源码阅读
- 记Struts2到Springmvc迁移-初入IT,思想需要转变