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

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

EasyRTMP是结合了多种音视频缓存及网络技术的一个rtmp直播推流端,包括:圆形缓冲区(circular buffer)、智能丢帧、自动重连、rtmp协议等等多种技术,能够非常有效地适应各种平台(Windows、Linux、ARM、Android、iOS),各种网络环境(有线、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方法生成,最后把数据返回推流器。

?

原文地址:https://www.cnblogs.com/TSINGSEE/p/11643004.html

时间: 2024-10-28 21:53:15

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

一套完整的印刷电路板设计系统DipTrace.v1.0

CEETRON.GLView.Inova.v9.1.03.Linux 1CD Geometric.Glovius.Pro.v4.0.0.254.Win32_64 2CD Software.Companions.GerbView.v8.14.Win32_64 2CD Ansys Products 16.1 Win64-ISO 5DVD Ansys Products 16.1 Linux64-ISO 6DVD Ansys Products 16.1 Documentation 1DVD Ansys.

Web自动化框架之五一套完整demo的点点滴滴(excel功能案例参数化+业务功能分层设计+mysql数据存储封装+截图+日志+测试报告+对接缺陷管理系统+自动编译部署环境+自动验证false、error案例)

标题很大,想说的很多,不知道从那开始~~直接步入正题吧 个人也是由于公司的人员的现状和项目的特殊情况,今年年中后开始折腾web自动化这块:整这个原因很简单,就是想能让自己偷点懒.也让减轻一点同事的苦力活:对于自动化测试与人工测试优缺势的问题,这里不想深入讨论,开一个博客收集一些观点然后开个讨论组讨论效果可能会更好. 标题上列的,是自己对web自动化这块统一的一个想象或是一套完整的自动化应所包含的的部分,目前完成了excel功能案例参数化+业务功能分层设计+mysql数据存储封装+截图+日志+测试

如何开发一套完整的直播软件源码,前期需要准备什么?

如何开发一套完整的直播软件,首先需要采集主播的视频和音频功能,然后传入流媒体服务器.本篇主要讲解如何采集主播的视频和音频功能,当前可以切换前置后置摄像头和焦点光标,直播APP拥有独立的美颜SDK,可以看见不一样的你,后续还会有直播的其他功能文章陆续发布.首先:讲解一下在直播软件源码中系统捕获音视频步骤: 1.创建AVCaptureSession对象 2.获取AVCaptureDevicel录像设备(摄像头),录音设备(麦克风),注意不具备输入数据功能,只是用来调节硬件设备的配置. 3.根据音频/

企业内部部署一套完整的DNS详细流程

企业内部部署一套完整的DNS详细流程 ? 1) 环境说明 ? 1. 共需要7台主机,各自的角色如下: A. 192.168.36.6(OS6):test B. 192.168.36.7(OS7):localdns C. 192.168.36.17(OS7):rootdns D. 192.168.36.27(OS7):comdns E. 192.168.36.37(OS7):master F. 192.168.36.47(OS7):slave G. 192.168.36.57(OS7):www 2

实现iOS图片等资源文件的热更新化(五): 一个简单完整的资源热更新页面

简介 一个简单的关于页面,有一个图片,版本号,App名称等,着重演示各个系列的文章完整集成示例. 动机与意义 这是系列文章的最后一篇.今天抽空写下,收下尾.文章本身会在第四篇的基础上,简单扩充下代码,实现在线下载与重置更改的功能. 如果能较为仔细地阅读前四篇文章,第五篇给出的示例,应当是可以理解为无足轻重的.但是,大多数时候,我们更多的可能只是需要一个简易的解决方案,就是那种拿来就可以用的东西,那种我们需要先能看到一个简要的示例来看下效果再解决是否再继续阅读的方案.如此,对于很久以后,由于各种原

压力测试~一套完整的压力测试项目文档

Web压力架构 张占岭 Web压力架构... 1 一 系统性能测试概述... 1 1.1 性能测试概述... 1 1.2 性能测试的指标... 2 1.3 关键点的描述... 2 1.4 性能测试的目的... 2 1.5 测试项目开发规范... 2 二 使用VS压力测试工具进行测试... 3 2.1 性能测试(WebTest). 3 2.1.1 概念... 3 2.1.2 如何建立性能测试... 3 2.1.3 使用CS代码快速建立性能测试... 5 2.1.4 运行当前性能测试... 6 2.

(转载)一套完整的UI设计规范手册(IOS版)

转载地址:http://www.ui001.com/article/302.html 比较正规的一套规范.包括:字体.颜色.按钮.图标.布局.空间.提示.命名规范等. [特色推荐] 设计尺寸看这里 http://www.ui001.com/chicun/ 找素材一站就够 http://so.ui001.com/ UI设计网址导航 http://hao.ui001.com/ 交流:UI设计交流群:8066846 ,与2000名设计师交流设计,分享素材. 建议:看到好的文章或素材,记得分享到微博等媒

一套完整系统对人生的意义

一人,一生 完善那一套系统 软件.硬件 让它硬邦邦! 完善于己,献于众人,献于国家. 这是一个做电子人的一丝力量, 记住你的理想,永远不要放弃 哪怕一本子孤独! 通信,通信,,当今,未来国家主权的命脉!

SpringBoot-06:SpringBoot增删改查一套完整的考试案例

------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 本此博客记录一套考试题,随后我把项目以及题目发到github上,简单的说一下springboot的开发 本此考试题用Spring+SpringMVC+MyBatis+SpringBoot+MySQL+Druid+.yml配置文件+thymeleaf模板引擎 我会把大量源码放上来,以及整合需要的注意点,大家可以一会去github上下载观看 项目概览: 一,jar包,pom.xml中的配置 <?xml vers