rtsp ios

http://stackoverflow.com/questions/19792398/receiving-end-of-file-while-streaming-rtsp-on-ios
你能获得End of File?
 
没获得
 
走不进去这方法:::需要足够的时间而已
 
http://www.binpress.com/app/videostream-sdk-for-ios/1322
 
http://www.wowza.com/forums/showthread.php?17370-Video-Streaming-terminating-5-seconds-before-the-end-of-the-video

http://stackoverflow.com/questions/19792398/receiving-end-of-file-while-streaming-rtsp-on-ios

http://www.wowza.com/forums/showthread.php?17370-Video-Streaming-terminating-5-seconds-before-the-end-of-the-video


一、编译针对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网络下能播放 iOS使用ffmpeg播放rstp实时监控视频数据流 ),具体原因估计是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, [moviePath cStringUsingEncoding: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实时监控视频数据流



http://stackoverflow.com/questions/9292034/check-if-rtsp-stream-has-finished

As Toby stated the RtcpGoodbye packet usually indicates that the Rtp session is over.

If you need a library to parse the packets check out http://net7mma.codeplex.com/

It has a RtspClient and RtspServer implementation and works with VLC so you can use Wireshark to see how it tells client's that the show is over or just break in the code when connecting to the RtspServer with VLC.

https://github.com/yixia/Vitamio-iOS



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值