IOS 下的音视频解决方案-FFMPEG

IOS平台下的ffmpeg编译简介,写在经历了n翻折腾之后。首先感谢Cocoachina中众多的资源

IOS下基于H264的音视频网传前后走通花了差不多1个多月时间。

先说下总的流程如下:

a)从网络接收H264视频数据 adpcm音频数据

b)网络数据输入到ffmpeg解码库 音频数据输入到音频解码库(音频解码库为自己所写)

c)ffmpeg解码出YUV420P视频数据 音频解码出PCM数据

d)将YUV420P数据转换为RGB24图像 用UIImageview输出 用OPENGL ES输出也可以(两种方法均验证过可行)

e)将音频PCM数据输入OPEN AL中输出

f)以上为整个流程,d1在iphone4上可以达到16桢 左右的效率


下面来说说FFMPEG部分。刚开始接触ffmpeg的时候遇到的第一个问题就是编译问题。

1 下载FFMPEG代码,该步比较简单可在ffmpeg官方网站上下载(我下的是0.6.5的,下了0.10的没编译过部分arm指令)

2 用gcc进行编译,写配置信息。该步骤浪费了太多的精力和时间,主要是没有在ios平台下的经验导致。

1)编译的时候不明白版本问题,编译后才发现每次编译需要制定不同的处理器模式为3种:armv6 armv7 i386版本

2)configure配置信息,前期犯了各种错误。还是对于ffmpeg的configure配置参数步了解导致。另外用gcc编译的经验也步丰富。

最终领悟出:配置信息主要为配置gcc的位置和汇编的编译器位置。

configure命令如下(该段配置信息为iFrameExtractor中。该demo也让我学习到很多知识,需要的可以在网上搜索下载):

./configure --disable-doc --disable-ffmpeg --disable-ffplay --disable-ffserver --disable-avfilter --enable-cross-compile --arch=arm --target-os=darwin --cc=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc --as='gas-preprocessor/gas-preprocessor.pl /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc' --sysroot=/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk --cpu=cortex-a8 --extra-cflags='-arch armv7' --extra-ldflags='-arch armv7 -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk' --enable-pic


配置成功后 make即可编译出armv7版本的lib*。a文件。

到此既可以生成ios下需要的ffmpeg静态库文件,需要用的时候拖入到项目中即可。

另外还需要添加libbz 、libz的framework

补充:在iOS6中编译出的。a的库在armv7s下编译目前有问题,可以修改target的Valid Architectures只支持Armv7去掉Armv7s


原文地址:http://blog.csdn.net/xufeidll/article/details/7419160

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
iOS中使用FFmpeg进行音视频同步可以通过以下步骤来实现: 1. 下载FFmpeg库 你可以通过CocoaPods等方式下载FFmpeg库。在Podfile文件中添加以下代码: ```ruby pod 'FFmpeg' ``` 下载完后运行`pod install`指令安装FFmpeg库。 2. 音视频解码 使用FFmpeg库进行音视频解码。对于音频和视频,你需要分别解码它们的数据。解码后的音频和视频数据通常存储在`AVFrame`结构体中。 3. 音视频同步 音视频同步的主要难点在于如何将两个不同的时钟进行同步。通常情况下,你需要使用音频时钟来同步视频帧,因为音频时钟是相对稳定的,而视频时钟可能会因为帧率不稳定等原因而不稳定。 具体实现方法可以采用以下步骤: - 获取音频播放时间戳(PTS) - 获取视频帧显示时间戳(PTS) - 计算音视频时间差 - 根据时间差进行音视频同步 其中,音频播放时间戳可以通过audio queue的回调函数获取,视频帧显示时间戳可以通过解码后的AVFrame结构体中的`pts`字段获取,时间差可以通过两个时间戳的差值计算得到。 4. 音视频渲染 在完成音视频同步后,你需要使用OpenGL ES或者Core Graphics等技术来渲染视频帧,同时使用Audio Queue或者OpenAL等技术来播放音频帧。 需要注意的是,iOS中使用FFmpeg进行音视频同步是一个比较复杂的过程,需要一定的技术基础和经验。同时,由于FFmpeg库的复杂性和特性,可能会涉及到一些版权和法律问题。因此,建议在使用前仔细查阅相关文档和法律条款,以免出现不必要的问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值