一、播放杂音的原因

  • 音频数据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播放时杂音相关推荐

  1. ALSA播放时杂音问题

    1.alsa的音频输出过程 alsa播放音频的原理通过snd_pcm_writei()等函数将音频数据写到alsa的buffer中.alsa启动播放以后,alsa驱动会产生中断,每次中断从buffer ...

  2. Spring Boot 2 (七):Spring Boot 如何解决项目启动时初始化资源

    Spring Boot 2 (七):Spring Boot 如何解决项目启动时初始化资源 在项目启动的时候需要做一些初始化的操作,比如初始化线程池,提前加载好加密证书等.今天就给大家介绍一个 Spri ...

  3. EasyCVR播放时cpu占用率较高的原因分析及解决方法

    TSINGSEE青犀视频开发的视频平台都具备Windows和Linux的运行版本,可以根据需求自由选择.当遇到项目现场有流量较大的情况,大多数用户都比较担心对CPU的占用,这种情况可以通过开启按需播放 ...

  4. PotPlayer 播放时出现如下问题怎么解决?

    播放时画面跟断层了一样,而且只在播放MP4文件时出现,如图.求助,各位如何解决,重新下载了也没用,烦.

  5. 从零开始学习音视频编程技术(七) FFMPEG Qt视频播放器之SDL的使用

    从零开始学习音视频编程技术(七) FFMPEG Qt视频播放器之SDL的使用 原文地址:http://blog.yundiantech.com/?log=blog&id=10 前面介绍了使用F ...

  6. 解决声卡爆音/杂音的四种方法

       内容提要:解决声卡爆音/杂音的四种方法,放MP3和电影的时候,总是会出现"噼噼啪啪"的声音,电脑播放任何音频时都会有爆音的情况出现.电脑采用了英特尔酷睿II E4500的处理 ...

  7. android平台移植ffmpeg 播放器

    引用:http://blog.csdn.net/ouyangtianhan/article/details/7943543 IT行业是一个踩在巨人肩膀上前进的行业,否则做的事情不一定有意义,所以我也是 ...

  8. 解决ffmpeg获取AAC音频文件duration不准

    最近测试提出了一个bug,ijk获取到的aac文件的duration不准,发来一看,确实不准,在AE或者系统mediaplayer中得到的都是3m48s(准确时间是MMParserExtractor: ...

  9. 在iOS上使用ffmpeg播放视频

    国外靠谱的有这几个: 1.Mooncatventures grouphttps://github.com/mooncatventures-group 2.KxMoviePlayer (use Open ...

最新文章

  1. 安装和部署Exchange Server 2007
  2. MySQL数据库-操作基础
  3. Python中threading的join和setDaemon的区别及用法 例子
  4. Windows服务器补丁列表及介绍_传奇单机架设,列表读取失败?单机架设经常遇到的问题分享!...
  5. HCNA(012-211) 试题解析
  6. 修改对象的某个属性的值_什么是类,什么是对象
  7. Linux 从头学 01:CPU 是如何执行一条指令的?
  8. 2020 年 Flink 最佳学习路线,学习的路上,你,并不孤单
  9. maven 指定jdk版本打包
  10. 启动zabbix server服务
  11. cocos2dx学习:TexturePacker的使用
  12. win7黑屏怎么办?最后一批win7旗舰版珍藏版密钥。
  13. 初学 Click 路由器
  14. JavaWeb网上书城项目
  15. iOS内购实现及测试排查错误列表
  16. 用JS生成声音,实现钢琴演奏
  17. 深圳大学计算机与软件学院寝室照片,深圳大学宿舍(深圳大学宿舍真实照片)...
  18. 沪股通、深股通、港股通、陆股通
  19. Qt使用键盘事件实现ESC键退出Halcon的绘图流程
  20. ⼤⼚H5 开发概述-H5 开发及其前世今⽣

热门文章

  1. github copilot X - chat 使用体验分享
  2. python 获取列表大小_python如何统计列表的长度
  3. tldr 是什么_“ TLDR”是什么意思,如何使用?
  4. 成为架构师,需要这些能力
  5. 广义表的非递归深度优先遍历及相关运算的c++实现
  6. 快!你的2018年GitHub报告还未领取
  7. C语言 打印星星(三种方法)
  8. java常用的几种线程池比较
  9. 深入理解相机体系 三 相机应用层 APP
  10. 如何用单片机实现基于电磁感应的无线充电系统