iOS利用FFmpeg解码音频数据并播放

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS利用FFmpeg解码音频数据并播放相关的知识,希望对你有一定的参考价值。

参考技术A 利用FFmepg解析并解码音频流数据,然后将解码后的音频数据送给Audio Queue以实现播放.

利用FFmpeg解析音频数据流, 利用FFmpeg解码音频数据为PCM格式. 利用Audio Queue Player实现音频数据播放.

本例以一个苹果原生相机录制的.MOV文件为例, 将该文件使用FFmpeg解析并解码,将解码后的数据放入传输队列中,然后开启audio queue player, 播放器在回调函数中轮循取出队列中的数据实现播放.

FFmpeg parse流程

FFmpeg解码流程

为了每次能够重新播放,这里需要标记当前是否为解码的第一帧数据,以重新启动播放器. 另一点是使用NSTimer等待音频数据放入队列再开始播放,因为audio queue是驱动播放模式,所以必须等音频数据放入传输队列再开始播放.

从Parse模块中可以获取当前文件对应FFmepg的上下文对象 AVFormatContext .因此音频流解码器信息可以直接获取.

AVFrame 作为解码后原始的音视频数据的容器.AVFrame通常被分配一次然后多次重复(例如,单个AVFrame以保持从解码器接收的帧)。在这种情况下,av_frame_unref()将释放框架所持有的任何引用,并在再次重用之前将其重置为其原始的清理状态。

调用avcodec_send_packet将压缩数据发送给解码器.最后利用循环接收avcodec_receive_frame解码后的音视频数据.

FFmpeg进行音频的解码和播放

参考技术A FFmpeg4.0.2编译32位和64位动态库
FFmpeg 内容介绍 音视频解码和播放

音频数字化主要有压缩与非压缩(pcm)两种方式。

上一篇 FFmpeg 内容介绍 音视频解码和播放 介绍了FFmpeg进行解码的常见函数和,解码的过程。相关的函数介绍忘记了,可以参考上一篇。

思路:由FFmpeg进行解码,将解码后的数据再通过jni传到Java中的audioTrack对象进行播放

以上就是利用FFmpeg对音频文件进行解码以及播放的内容,如果有错误,欢迎大家指正出来

以上是关于iOS利用FFmpeg解码音频数据并播放的主要内容,如果未能解决你的问题,请参考以下文章

(四)Android通过ffmpeg解码音频

FFmpeg学习3:播放音频

FFMPEG 音频解码和绘制波形

第十章 视频播放器开发之音频播放

Android FFmpeg视频播放器三 音频封装格式解码播放

ffmpeg 播放音频