iOS基于Ffmpeg资料(四)

一、编译针对iOS平台的ffmpeg库(kxmovie) 近期有一个项目,需要播放各种格式的音频、视频以及网络摄像头实时监控的视频流数据,经过多种折腾之后,最后选择了kxmovie,kxmovie项目已经整合了ffmpeg和简单的播放器,具体可以参考kxmovie主页:https://github.com/kolyvan/kxmovie 编译kxmovie很简单,已经支持iOS 6.1 和 armv7s,一次成功,编译过程没出现什么问题:

git clone git://github.com/kolyvan/kxmovie.git
cd kxmovie
git submodule update --init 
rake

二、使用kxmovie 1.把kxmovie/output文件夹下文件添加到工程 2.添加框架:MediaPlayer, CoreAudio, AudioToolbox, Accelerate, QuartzCore, OpenGLES and libz.dylib,libiconv.dylib 3.添加lib库:libkxmovie.a, libavcodec.a, libavformat.a, libavutil.a, libswscale.a, libswresample.a 4.播放视频:

ViewController *vc;
    vc = [KxMovieViewController movieViewControllerWithContentPath:path parameters:nil];
    [self presentViewController:vc animated:YES completion:nil]; 

5.具体使用参考demo工程:KxMovieExample 三、碰到的问题 播放本地视频和网络视频正常,播放网络摄像头实时监控视频流(h264)的时候出现错误:

[rtsp @ 0x906cc00] UDP timeout, retrying with TCP

[rtsp @ 0x906cc00] Nonmatching transport in server reply

[rtsp @ 0x906cc00] Could not find codec parameters for stream 0 (Video: h264): unspecified size

Consider increasing the value for the ‘analyzeduration‘ and ‘probesize‘ options

Couldn‘t find stream information

跟踪代码,错误是在avformat_find_stream_info获取流信息失败的时候的时候触发。

if(avformat_find_stream_info(pFormatCtx,NULL) < 0) {

av_log(NULL, AV_LOG_ERROR, "Couldn‘t find stream information\n");

goto initError;

}

经过几天的摸索,最终确定是网络的问题(在模拟器播放一直出错,在3G网络下能播放),具体原因估计是rstp视频流,程序默认采用udp传输或者组播,导致在私有网络视频流不能正常传输。 解决方法,把视频流的传输模式强制成tcp传输:

……

// Open video file

pFormatCtx = avformat_alloc_context();

//有三种传输方式:tcp udp_multicast udp,强制采用tcp传输

AVDictionary* options = NULL;

av_dict_set(&options, "rtsp_transport", "tcp", 0);

if(avformat_open_input(&pFormatCtx, [moviePathcStringUsingEncoding:NSASCIIStringEncoding],NULL,&options) != 0) {

av_log(NULL, AV_LOG_ERROR, "Couldn‘t open file\n");

goto initError;

}

// Retrieve stream information

if(avformat_find_stream_info(pFormatCtx,NULL) < 0) {

av_log(NULL, AV_LOG_ERROR, "Couldn‘t find stream information\n");

goto initError;

} ……

时间: 2024-10-24 05:24:47

iOS基于Ffmpeg资料(四)的相关文章

iOS基于ffmpeg做出的视频直播 (一)

现在非常流行直播,相信很多人都跟我一样十分好奇这个技术是如何实现的,正好最近在做一个ffmpeg的项目,发现这个工具很容易就可以做直播,下面来给大家分享下技术要点: 首先你得编译出ffmpeg运行所需的静态库,这个百度一下有很多内容,这里我就不多说了,建议可以用Github上的一个开源脚本来编译,简单粗暴有效率. 地址:GitHub - kewlbear/FFmpeg-iOS-build-script: Shell scripts to build FFmpeg for iOS and tvOS

iOS基于FFmpeg之配置FFmpeg框架(二)

本文出自:这里 摘自http://blog.sina.com.cn/s/blog_47522f7f0102vbwp.html,按步骤实践可行.感谢! 1. FFMPEG层次结构的简单理解 要使用FFMPEG,首先需要理解FFMPEG的代码结构.根据志哥的提示,ffmpeg的代码是包括两部分的,一部分是library,一部分是tool.api都是在library里面,如果直接调api来操作视频的话,就需要写c或者c++了.另一部分是tool,使用的是命令行,则不需要自己去编码来实现视频操作的流程.

基于ffmpeg入门学习相关的资料

上份工作主要是做移动端流媒体,写了几个版本的播放器,现在正好有点时间,打算将部分不设计公司保密的代码开源了,另外重要的一点是把ffmpeg这一块入门的资料整理整理.先列的表单 1.iOS下几个播放器资料整理,以及与ffmpeg优缺点对比. 2.讲解ffmepg如何编译适合iOS端的静态库 3.归纳几个Github上开源ffmpeg播放器Demo. 4.着手实现自己的基于ffmpeg的播放器. a.软解方案 b.iOS下硬件解码方案. 5.详细归纳下iOS的Avplayer.

iOS平台基于ffmpeg的视频直播技术揭秘

现在非常流行直播,相信很多人都跟我一样十分好奇这个技术是如何实现的,正好最近在做一个ffmpeg的项目,发现这个工具很容易就可以做直播,下面来给大家分享下技术要点: 首先你得编译出ffmpeg运行所需的静态库,这个百度一下有很多内容,这里我就不多说了,建议可以用Github上的一个开源脚本来编译,简单粗暴有效率. 地址:GitHub - kewlbear/FFmpeg-iOS-build-script: Shell scripts to build FFmpeg for iOS and tvOS

最简单的基于FFmpeg的移动端样例:IOS HelloWorld

===================================================== 最简单的基于FFmpeg的移动端样例系列文章列表: 最简单的基于FFmpeg的移动端样例:Android HelloWorld 最简单的基于FFmpeg的移动端样例:Android 视频解码器 最简单的基于FFmpeg的移动端样例:Android 视频解码器-单个库版 最简单的基于FFmpeg的移动端样例:Android 推流器 最简单的基于FFmpeg的移动端样例:Android 视频转

最简单的基于FFmpeg的移动端样例:IOS 推流器

===================================================== 最简单的基于FFmpeg的移动端样例系列文章列表: 最简单的基于FFmpeg的移动端样例:Android HelloWorld 最简单的基于FFmpeg的移动端样例:Android 视频解码器 最简单的基于FFmpeg的移动端样例:Android 视频解码器-单个库版 最简单的基于FFmpeg的移动端样例:Android 推流器 最简单的基于FFmpeg的移动端样例:Android 视频转

最简单的基于FFmpeg的移动端例子:IOS 视频解码器

本文记录IOS平台下基于FFmpeg的视频解码器.该示例C语言的源代码来自于<最简单的基于FFMPEG+SDL的视频播放器>.相关的概念就不再重复记录了. 源代码 项目的目录结构如图所示. C代码位于ViewController.m文件中,内容如下所示. /** * 最简单的基于FFmpeg的视频解码器-IOS * Simplest FFmpeg IOS Decoder * * 雷霄骅 Lei Xiaohua * [email protected] * 中国传媒大学/数字电视技术 * Comm

最简单的基于FFmpeg的移动端例子:IOS HelloWorld

本文记录IOS平台下基于FFmpeg的HelloWorld程序.该示例C语言的源代码来自于<最简单的基于FFMPEG的Helloworld程序>.相关的概念就不再重复记录了. IOS程序使用FFmpeg类库的说明 IOS应用程序使用FFmpeg类库的流程如下所示. 1. 编译FFmpeg类库 编译IOS的FFmpeg类库需要支持5种架构:armv7.armv7s.arm64.i386.x86_64.其中前面3个是给真机使用的,后面2个是给模拟器使用的.本文记录的FFmpeg类库还支持第三方类库

最简单的基于FFmpeg的移动端例子:IOS 推流器

本文记录iOS平台下基于FFmpeg的推流器.该示例C语言的源代码来自于<最简单的基于FFMPEG的推流器>.相关的概念就不再重复记录了. 源代码 项目的目录结构如图所示. C代码位于ViewController.m文件中,内容如下所示. [objc] view plain copy /** * 最简单的基于FFmpeg的推流器-IOS * Simplest FFmpeg IOS Streamer * * 雷霄骅 Lei Xiaohua * [email protected] * 中国传媒大学