EasyRTMP+EasyDSS实现一套完整的紧急视频回传直播与存储回放方案之EasyRTMP-iOS的AACEncoder.m文件实现音频的硬编码功能

Posted TSINGSEE

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了EasyRTMP+EasyDSS实现一套完整的紧急视频回传直播与存储回放方案之EasyRTMP-iOS的AACEncoder.m文件实现音频的硬编码功能相关的知识,希望对你有一定的参考价值。

音视频流媒体硬解码是指不使用CPU进行编码,使用显卡GPU,专用的DSP、FPGA、ASIC芯片等硬件进行编码。编码框架Video ToolBox和AudioToolbox。

EasyRTMP是结合了多种音视频缓存及网络技术的一个rtmp直播推流端,包括:圆形缓冲区(circular buffer)、智能丢帧、自动重连、rtmp协议等等多种技术,能够非常有效地适应各种平台(Windows、Linux、ARM、androidios),各种网络环境(有线、wifi、4G),以及各种情况下的直播恢复(服务器重启、网络重启、硬件设备重启)。

技术图片技术图片?

调用方法

EasyRTMP_File:EasyRTMP做为RTMP推送端,将本地文件推送到RTMP流媒体服务器;

EasyRTMP_RTSP:将RTSP/RTP数据获取到本地,再通过EasyRTMP推送到RTMP服务器;

EasyRTMP-Android:Android安卓RTMP直播推流,采集安卓手机前/后摄像头、麦克风音视频推送直播;项目地址:https://github.com/EasyDSS/EasyRTMP-Android

EasyRTMP-iOS:iOS苹果RTMP直播推流,采集苹果手机前/后摄像头、麦克风音视频推送直播;项目地址

提出问题:

EasyRTMP-iOS介绍下音频硬编码的简单流程。

分析问题:

AACEncoder.m文件实现了音频的硬编码功能。

解决问题:

iOS处理音频的库是AudioToolbox,音频硬编码的流程如下:

1、创建并配置AVCaptureSession
创建AVCaptureSession,然后找到音频的AVCaptureDevice,根据音频device创建输入并添加到session,最后添加output到session。

2、创建转换器
AudioStreamBasicDescription是输出流的结构体描述,配置好outAudioStreamBasicDescription后,根据AudioClassDescription(编码器),调用AudioConverterNewSpecific创建转换器。详情见方法:

- (void) setupEncoderFromSampleBuffer:(CMSampleBufferRef)sampleBuffer
技术图片

3、获取到PCM数据并传入编码器
用CMSampleBufferGetDataBuffer获取到CMSampleBufferRef里面的CMBlockBufferRef,再通过CMBlockBufferGetDataPointer获取到_pcmBufferSize和_pcmBuffer;调用AudioConverterFillComplexBuffer传入数据,并在callBack函数调用填充buffer的方法。详情见方法:

- (void) encode:(CMSampleBufferRef)sampleBuffer
技术图片

4、得到rawAAC码流,添加ADTS头。
AudioConverterFillComplexBuffer返回的是AAC原始码流,需要在AAC每帧添加ADTS头,调用adtsDataForPacketLength方法生成,最后把数据返回推流器。

技术图片技术图片?

以上是关于EasyRTMP+EasyDSS实现一套完整的紧急视频回传直播与存储回放方案之EasyRTMP-iOS的AACEncoder.m文件实现音频的硬编码功能的主要内容,如果未能解决你的问题,请参考以下文章

WindowsLinuxARMAndroidiOS全平台支持的RTMP推流组件EasyRTMP-iOS如何接入软编码?

实现手机直播推送屏幕推送及录像功能RTMP推流组件之EasyRTMP-Android设置授权Key介绍

EasyRTMP实现RTMP异步直播推送之环形缓冲区设计

RTP推流服务器EasyRTMP实现内网摄像头RTSP拉流转码RTMP推流到EasyRTMP-Android音频采集流程是什么?

EasyRTMP实现内网摄像头RTSP拉流转码RTMP推流到RTMP服务器EasyRTMP-Android视频采集流程是什么?

实现手机直播推送屏幕推送及录像功能RTMP推流组件之EasyRTMP-Android使用H265编码流程