一、编译针对iOS平台的ffmpeg库(kxmovie)

最近有一个项目。须要播放各种格式的音频、视频以及网络摄像头实时监控的视频流数据,经过多种折腾之后,最后选择了kxmovie,kxmovie项目已经整合了ffmpeg和简单的播放器,详细能够參考kxmovie主页:https://github.com/kolyvan/kxmovie 
编译kxmovie非常easy,已经支持iOS 6.1 和 armv7s,一次成功。编译过程没出现什么问题:
git clone git://github.com/kolyvan/kxmovie.git
cd kxmovie
git submodule update --init 
rake
二、使用kxmovie
1.把kxmovie/output目录下文件加入到project
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.详细使用參考demoproject: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;

}

……

iOS使用ffmpeg播放rstp实时监控视频数据流的更多相关文章

  1. 用Red5搭建支持WEB播放的实时监控视频

    用Red5搭建支持WEB播放的实时监控视频 1. 下载Red5:https://github.com/Red5/red5-server/releases 下载了Red5 1.0.6 release的Z ...

  2. ios webview 只能播放带域名的视频连接好奇怪!

    - (void)loadWebView { UIWebView *webView = [[UIWebView alloc] initWithFrame:CGRectMake(, , SCREEN_WI ...

  3. 前端Web浏览器基于Flash如何实时播放监控视频画面(前言)之流程介绍

    [关键字:前端浏览器如何播放RTSP流画面.前端浏览器如何播放RTMP流画面] 本片文章只是起到抛砖引玉的作用,能从头到尾走通就行,并不做深入研究.为了让文章通俗易懂,尽量使用白话描述. 考虑到视频延 ...

  4. 前端Web浏览器基于Flash如何实时播放监控视频画面(四)之使用videoJs‘拉流’

    本片文章只是起到抛砖引玉的作用,能从头到尾走通就行,并不做深入研究.为了让文章通俗易懂,尽量使用白话描述. 0x001: 下载videoJs 对于Video.js 5.x及更低版本,Flash技术(v ...

  5. iOS开发----音频播放、录音、视频播放、拍照、视频录制

    随着移动互联网的发展,如今的手机早已不是打电话.发短信那么简单了,播放音乐.视频.录音.拍照等都是很常用的功能.在iOS中对于多媒体的支持是非常强大的,无论是音视频播放.录制,还是对麦克风.摄像头的操 ...

  6. 基于Red5与ffmpeg实现rtmp处理NVR或摄像头的监控视频处理方案

    背景 各大监控视频平台厂商与外对接均是基于IE的OCX插件方式提供实时视频查看.历史视频回放与历史视频下载.在h5已大行其道的当下,基于IE的OCX插件方式已满足不了广大客户的实际需求,因此需要一个兼 ...

  7. Java实现Android,iOS设备实时监控

    Java实现Android设备实时监控 设计思路: 第一,启动一个实时截图线程,负责实时截取Android设备屏幕,保存到本地路径. 第二,在JSP页面,定义一个img对象,实时更换img对象的src ...

  8. 小程序升级实时音视频录制及播放能力,开放 Wi-Fi、NFC(HCE) 等硬件连接功能

    “ 小程序升级实时音视频录制及播放能力,开放 Wi-Fi.NFC(HCE) 等硬件连接功能.同时提供按需加载.自定义组件和更多访问层级等新特性,增强了第三方平台的能力,以满足日趋丰富的业务需求.” 0 ...

  9. iOS - 使用MPMoviePlayerController播放在线视频

    一 MPMoviePlayerController 简介 在iOS中播放视频可以使用MediaPlayer.framework种的MPMoviePlayerController类来完成,它支持本地视频 ...

随机推荐

  1. python连续爬取多个网页的图片分别保存到不同的文件夹

      python连续爬取多个网页的图片分别保存到不同的文件夹 作者:vpoet mail:vpoet_sir@163.com #coding:utf-8 import urllib import ur ...

  2. 操作系统基本概念(内核态与用户态、操作系统结构)-by sixleaves

    内核态与用户态(为什么存在这种机制.程序应处于哪个状态.如何判断当前所处状态.哪些功能需要内核态.如何实现这种机制) 1.首先我们应该思考清楚为什么会有内核态和用户态?(为什么存在这种机制) 因为计算 ...

  3. (转载)HDU4565

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4565 这个博客讲的比较好:http://blog.csdn.net/ljd4305/article/d ...

  4. PHP代码,拒绝频繁访问

    一个网站性能有限,如果有人恶意去频繁对页面进行刷新,其实对服务器影响是很大的,导致资源使用非常高,直接影响到其他用户的体验. 那么对于这样的一些频繁访问,我们该如何去拒绝它呢? 我总结了两种方法:第一 ...

  5. tr转换或删除字符

    字符处理命令:tr —— 转换或删除字符 逐个字符处理而不是处理单词的tr [OPTION]... SET1 [SET2]    -d: 删除出现在字符集中的所有字符 tr ab AB

  6. 记事本写hello world_Java

    1 新建记事本,重命名为hello.java 2 打开hello.java,编辑并保存 class Hello { public static void main(String[] args) { S ...

  7. [裸KMP][HDU1711][Number Sequence]

    题意 找到子串在母串出现的第一个位置 解法 裸的KMP 特别的地方 第一次不看模板自己敲的KMP #include<stdio.h> const int maxn=100000; cons ...

  8. oracle中的rowid--伪列-删除表中的重复内容-实用

    1.rowid是一个伪列,是用来确保表中行的唯一性,它并不能指示出行的物理位置,但可以用来定位行. 2.rowid是存储在索引中的一组既定的值(当行确定后).我们可以像表中普通的列一样将它选出来. 3 ...

  9. 使用XE5-PACTH破解Delphi-XE5时,出现检查文件大小失败的解决方法

    今天给自己的64位Win7电脑破解Delphi-XE5时,一直出现检查bds.exe尺寸大小失败的错误提示. 网上查了很久,Csdn上给了个破解的bds.exe,本人一直没什么Csdn积分,没得下,所 ...

  10. 输出jq对象

    console.log($()); 效果截图: