博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS音频AAC视频H264编码 推流最佳方案
阅读量:7078 次
发布时间:2019-06-28

本文共 1544 字,大约阅读时间需要 5 分钟。

hot3.png

项目都是个人的调研与实验,可能很多不好或者不对的地方请多包涵。

1    功能概况

*  实现音视频的数据的采集

*  实现音视频数据的编码,视频编码成h264,音频编码成aac

*  实现音视频数据的发布,将编码好的音视频数据传输到服务器

2 视频和音频编码方案

视频硬编码需要使用AVAssetWriter,但是他只支持直接将数据编码成h264并写入文件,不提供接口中途获取视频数据处理,我们需要在保存的文件中读出数据

据顶采用软编码,主流开源编解码器Xvid,x264,ffmpeg,Xvid是基于MPEG4协议的编解码器,x264是基于H.264协议的编码器,ffmpeg集合了各种音频,视频编解码协议,通过设置参数可以完成基于MPEG4,H.264等协议的编解码,基于效率,决定使用x264进行软编

Ios支持aac音频软编码和硬编码,硬编无需消耗cpu,效率高,决定使用硬编。使用Audio Queue

3. 技术流程图

4  相关技术

(1)x264编码器

x264是一个采用的视频编码。x264的主要功能在于进行的视频编码,而不是作为解码器(decoder)之用。

(2) 在xcode下编译x264库

*  下载x264的库

*  打开shell,执行编译,由于我们的饮食频道额采集在模拟器上不能进行,所以不编译i386的库,直接编译armv7的库

*  执行make,编译成功得到libx264.a

(3) Audioqueue简介

要在iOS设备上播放和录制音频,苹果推荐我们使用AVFoundation框架中的AVAudioPlayer和AVAudioRecorder类。虽然用法比较简单,但是不支持流式;这就意味着:在播放音频前,必须等到整个音频加载完成后,才能开始播放音频;录音时,也必须等到录音结束后,才能获取到录音数据。这给应用造成了很大的局限性。为了解决这个问题,我们就需要使用Audio Queue Services来播放和录制音频.

Audio Queue Services提供了在iOS 和 Mac OS X上直接录制和播放各种格式的音频,他能让你的应用程序在没有硬件接口知识的情况下使用硬件录音和播放设备,如microphones 和loudspeakers。

(4)  Audioqueue录制音频过程

一个Recording Audio Queue,包括Buffer(缓冲器)组成的Buffer Queue(缓冲队列),以及一个Callback(回调)

录音流程如下:

l 将音频填入第一个缓冲器中

l 当队列中的第一个缓冲器填满时,会自动填充下一个缓冲器。此时,会触发回调。

l 在回调函数中需要将音频数据流写入磁盘

l 然后,需要在回调函数中将该缓冲器重新放入缓冲队列,以便重复使用该缓冲器。重复步骤2。

Audio Queue录制aac音频数据如下流程:

5 rtmp发送音视频

  xcode中编译librtmp库

在xcode中使用librtmp库可将音视频数据打成包,遵循rtmp协议,将数据发送到指定服务器,前提需要编译librtmp库并在xcode中使用此库

*  下载rtmpdump源码

*  shell下编译librtmp成librtmp.a并加入到xcode工程

*  拷贝rtmpdump的include文件夹到xcode下的相应工程,并将路径添加到User Header SearchPaths

*  在工程中引入使用librtmp

6. 音视频同步

采用时间戳技术,时间戳即为一帧的采集时间,音视频采取同一个参考时间,给每个帧打上时间戳

待续。。。

转载于:https://my.oschina.net/u/2286256/blog/538190

你可能感兴趣的文章
ORACLE表分区
查看>>
hdoj2602_Bone Collector
查看>>
【转】如何解决系统事件出现DCOM 10009错误?
查看>>
SCOM 2007 R2监控系统安装部署(六)配置SCOM邮件通知
查看>>
通过枚举定义每个枚举类型的值
查看>>
我的友情链接
查看>>
自己动手设计java web框架(一)-封装请求拦截器DispatchServlet
查看>>
C++ - 程序运行时间
查看>>
windows上安装golang1.7的编译环境
查看>>
Dubbo集群调用模式之Mergeable实现
查看>>
我的友情链接
查看>>
Linux shell高级编程(上)
查看>>
CCNA笔记——802规定,网络层,传输层,会话层,表示层,应用层,封装
查看>>
mongodb自带监控 mongostat数值说明
查看>>
教与学的思考
查看>>
阿里云maven仓库地址
查看>>
学习资料积累
查看>>
linux下挂载U盘的方法
查看>>
linux 基础练习题、面试题(一)
查看>>
Java(Mybatis)和SQL(MySQL)之间的数据类型转换
查看>>