七、解决FFmpeg播放时杂音
一、播放杂音的原因
- 音频数据buff的大小不正确
- SDL_MixAudio拷贝stream的数据有问题
二、解决方法
1. 音频数据buff的大小不正确(重采样后samples的大小发生了变化)
源代码:
swr_convert(swrCtx, &out_buffer, 2 * 44100, (const uint8_t **)frame->data, frame->nb_samples);
out_buffer_size = av_samples_get_buffer_size(NULL, out_channel_nb, frame->nb_samples,out_sample_fmt, 1);
改为:
int len = swr_convert(swrCtx, &out_buffer, 44100, (const uint8_t **)frame->data, frame->nb_samples);
//获取sample的size
out_buffer_size = len * out_channel_nb * av_get_bytes_per_sample(out_sample_fmt);
2. SDL_MixAudio拷贝stream的数据有问题(stream中有空数据)
源代码:
//设置音频数据长度
static Uint32 audio_len;
static Uint8 *audio_pos;
void VideoPlayer::fill_audio(void *udata, Uint8 *stream, int len){SDL_memset(stream, 0, len);if (audio_len == 0) //有数据才播放return;len = (len>audio_len ? audio_len : len);SDL_MixAudio(stream, audio_pos, len, SDL_MIX_MAXVOLUME);audio_pos += len;audio_len -= len;
}
改为:
static Uint32 audio_len;
static Uint8 *audio_pos;
void VideoPlayer::fill_audio(void *udata, Uint8 *stream, int len){SDL_memset(stream, 0, len);while (len > 0){if (audio_len == 0)continue;int temp = (len > audio_len ? audio_len : len);SDL_MixAudio(stream, audio_pos, temp, SDL_MIX_MAXVOLUME);audio_pos += temp;audio_len -= temp;stream += temp;len -= temp;}
}
github:https://github.com/ZhouHanyu18/SimplePlayer
七、解决FFmpeg播放时杂音相关推荐
- ALSA播放时杂音问题
1.alsa的音频输出过程 alsa播放音频的原理通过snd_pcm_writei()等函数将音频数据写到alsa的buffer中.alsa启动播放以后,alsa驱动会产生中断,每次中断从buffer ...
- Spring Boot 2 (七):Spring Boot 如何解决项目启动时初始化资源
Spring Boot 2 (七):Spring Boot 如何解决项目启动时初始化资源 在项目启动的时候需要做一些初始化的操作,比如初始化线程池,提前加载好加密证书等.今天就给大家介绍一个 Spri ...
- EasyCVR播放时cpu占用率较高的原因分析及解决方法
TSINGSEE青犀视频开发的视频平台都具备Windows和Linux的运行版本,可以根据需求自由选择.当遇到项目现场有流量较大的情况,大多数用户都比较担心对CPU的占用,这种情况可以通过开启按需播放 ...
- PotPlayer 播放时出现如下问题怎么解决?
播放时画面跟断层了一样,而且只在播放MP4文件时出现,如图.求助,各位如何解决,重新下载了也没用,烦.
- 从零开始学习音视频编程技术(七) FFMPEG Qt视频播放器之SDL的使用
从零开始学习音视频编程技术(七) FFMPEG Qt视频播放器之SDL的使用 原文地址:http://blog.yundiantech.com/?log=blog&id=10 前面介绍了使用F ...
- 解决声卡爆音/杂音的四种方法
内容提要:解决声卡爆音/杂音的四种方法,放MP3和电影的时候,总是会出现"噼噼啪啪"的声音,电脑播放任何音频时都会有爆音的情况出现.电脑采用了英特尔酷睿II E4500的处理 ...
- android平台移植ffmpeg 播放器
引用:http://blog.csdn.net/ouyangtianhan/article/details/7943543 IT行业是一个踩在巨人肩膀上前进的行业,否则做的事情不一定有意义,所以我也是 ...
- 解决ffmpeg获取AAC音频文件duration不准
最近测试提出了一个bug,ijk获取到的aac文件的duration不准,发来一看,确实不准,在AE或者系统mediaplayer中得到的都是3m48s(准确时间是MMParserExtractor: ...
- 在iOS上使用ffmpeg播放视频
国外靠谱的有这几个: 1.Mooncatventures grouphttps://github.com/mooncatventures-group 2.KxMoviePlayer (use Open ...
最新文章
- 安装和部署Exchange Server 2007
- MySQL数据库-操作基础
- Python中threading的join和setDaemon的区别及用法 例子
- Windows服务器补丁列表及介绍_传奇单机架设,列表读取失败?单机架设经常遇到的问题分享!...
- HCNA(012-211) 试题解析
- 修改对象的某个属性的值_什么是类,什么是对象
- Linux 从头学 01:CPU 是如何执行一条指令的?
- 2020 年 Flink 最佳学习路线,学习的路上,你,并不孤单
- maven 指定jdk版本打包
- 启动zabbix server服务
- cocos2dx学习:TexturePacker的使用
- win7黑屏怎么办?最后一批win7旗舰版珍藏版密钥。
- 初学 Click 路由器
- JavaWeb网上书城项目
- iOS内购实现及测试排查错误列表
- 用JS生成声音,实现钢琴演奏
- 深圳大学计算机与软件学院寝室照片,深圳大学宿舍(深圳大学宿舍真实照片)...
- 沪股通、深股通、港股通、陆股通
- Qt使用键盘事件实现ESC键退出Halcon的绘图流程
- ⼤⼚H5 开发概述-H5 开发及其前世今⽣