FFmpeg库对于音视频的编解码都做了相应的处理,使用起来相当方便,iOS的原生播放器并不支持opus格式的音频,因此需要对opus格式进行解码。
下面是对opus解码的主要步骤:
导入ffmpeg相关库:
#include "libavformat/avformat.h"
#include "libswscale/swscale.h"
#include "libavcodec/avcodec.h"
#include "libavformat/avio.h"
#include "libswresample/swresample.h"
#include "libavutil/avutil.h"
定义相关的属性及变量:
{
AVFormatContext *pFormatCtx; //文件格式
AVCodecContext *pCodecCtx;
AVFrame *pFrame;
char *_audioBuffer;
NSUInteger _audioBufferSize;
AVPacket _packet, _currentPacket;
}
/* Initialize with movie at moviePath. Output dimensions are set to source dimensions. */
-(id)initWithAudio:(NSString *)moviePath;
-(void)closeAudio;
@property (nonatomic, retain) NSMutableArray *audioPacketQueue;
@property (nonatomic, assign) AVCodecContext *_audioCodecContext; //编码格式
@property (nonatomic, assign) AudioQueueBufferRef emptyAudioBuffer; //音频缓存
@property (nonatomic, assign) int audioPacketQueueSize;
@property (nonatomic, assign) AVStream *_audioStream;
解码的实现及重采样、播放得引入位置
-(id)initWithAudio:(NSString *)moviePath {