iOS音频AAC视频H264编码 推流最佳方案

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

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是一个采用GPL授权的视频编码自由软件[1]。x264的主要功能在于进行H.264/MPEG-4 AVC的视频编码,而不是作为解码器(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. 音视频同步

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

待续。。。

iOS音频AAC视频H264编码 推流最佳方案的更多相关文章

  1. 笔记- iphone手机音频AAC视频H264推流(一) iphone手机推流最佳方案

    这几个月一直在做iphone手机音视频的东西,由于个人比较懒,所以一直没整理,现在闲的蛋疼,并且以后项目要搁置了,在这里记录一下我做的iphone手机推流的东西. 项目都是个人的调研与实验,可能很多不 ...

  2. iOS音频与视频的开发(一)-使用AVAudioPlayer播放音乐、使用AVPlayerViewController播放视频

    iOS的多媒体支持非常强大,它提供了多套支持多媒体的API,无论是音频.视频的播放,还是录制,iOS都提供了多种API支持.借助于这些API的支持,iOS应用既可以查看.播放手机相册中的照片.视频,也 ...

  3. iOS音频与视频的开发(二)- 使用AVAudioRecorder进行录制音频

    1.使用AVAudioRecorder录制视频 AVAudioRecorder与AVAudioPlayer类似,它们都属于AVFoundation的类.AVAudioRecorder的功能类似于一个录 ...

  4. 采集音频和摄像头视频并实时H264编码及AAC编码[转]

    0. 前言 我在前两篇文章中写了DirectShow捕获音视频然后生成avi,再进行264编码的方法.那种方法有一些局限性,不适合实时性质的应用,如:视频会议.视频聊天.视频监控等.本文所使用的技术, ...

  5. 采集音频和摄像头视频并实时H264编码及AAC编码

    转自:http://www.cnblogs.com/haibindev/archive/2011/11/10/2244442.html 0. 前言 我在前两篇文章中写了DirectShow捕获音视频然 ...

  6. 说下 winOS / IOS / android /Linux 视频、音频 编码解码问题

    最近有朋友遇到一个问题, ios 上传视频文件,想在本地压缩下,然后再上传到服务器. 问有没有什么 视频处理的库, 最近Khronos的webgl 支持HTML5 ,(原理 WebGL 是openGL ...

  7. iOS视频硬编码技术

    iOS视频硬编码技术 一.iOS视频采集硬编码 基本原理 硬编码 & 软编码 硬编码:通过系统自带的Camera录制视频,实际上调用的是底层的高清编码硬件模块,即显卡,不使用CPU,速度快 软 ...

  8. iOS 音频视频图像合成那点事

    代码地址如下:http://www.demodashi.com/demo/13420.html 人而无信不知其可 前言 很久很久没有写点什么了,只因为最近事情太多了,这几天终于闲下来了,趁此机会,记录 ...

  9. 《转》iOS音频视频初级开发

    代码改变世界 Posts - 73, Articles - 0, Comments - 1539 Cnblogs Dashboard Logout HOME CONTACT GALLERY RSS   ...

随机推荐

  1. linux 操作mysql

    MySQL删除数据库时的错误 ERROR 1010 (HY000): Error dropping database (can't rmdir './myapp', errno: 39)的错误信息. ...

  2. Android屏幕适配全攻略(最权威的官方适配指导) (转)

    招聘信息: Cocos2d-X 前端主程 [新浪微博]手机客户端iOS研发工程师 20k-40k iOS 开发工程师 iOS高级开发工程师(中国排名第一的企业级移动互联网云计算公司 和创科技 红圈营销 ...

  3. HDU 5900 QSC and Master 区间DP

    QSC and Master Problem Description   Every school has some legends, Northeastern University is the s ...

  4. 时间和地域三级联动选择器(Android-PickerView-master)

    先附上下载和效果展示地址 https://github.com/saiwu-bigkoo/Android-PickerView 之后说一下程序依赖后会遇到的问题Error:(2, 0) Plugin ...

  5. PHP入门 - - 05-->编写HTML页面的常用标签

    一.文字版面的编辑 1.格式标签 格式标签用于定义网页中文本的布局.缩进.位置.换行.列表等          <br>           换行          <p>   ...

  6. UVA 1314 最小表示法

    题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=36117 题意:给定长度为n的字符串,求一个起点使字符串从该起点起的 ...

  7. loopback 04

    数据库相关 关系定义 relationship 定义关系之后的使用 relations: { "images": { "type": "hasMany ...

  8. 微軟将从 .NET 4 以后的版本弃用 System.Data.OracleClient 以及Oracle 的各种连接方法

    这是微软官方 ADO.NET Team Blog 去年就公布的消息: http://blogs.msdn.com/adonet/archive/2009/06/15/system-data-oracl ...

  9. Android一体式(沉浸式)状态栏的实现

    注:公司开发任务适配是在4.4版本之上进行,所以此适配仅在4.4之上进行测试. 1.主要使用了第三方的开源项目SystemBarTint,github:https://github.com/jgilf ...

  10. jQuery下操作dropdownlist

    dropdownlist呈现到html中如下: <select id="ddlOrg" name="ddlOrg">     <option ...