avformat_find_stream_info函数卡住问题

问题:初始化RTSP流时,在android设备上卡住在avformat_find_stream_info函数,然后程序崩溃。

但其他URL没问题,且同样在代码在iOS上没问题,由于jni调试,也没看到ffmepg打印什么异常信息出来,而IOS上可以看到如下打印信息

[objc] view plaincopy

  1. avformat_open_input ret= 0
  2. UDP timeout, retrying with TCP

看到这个当时竟然没反应过来,知道看到参考链接说明才发现。

代码如下:

[objc] view plaincopy

  1. av_register_all();
  2. av_log_set_level(AV_LOG_DEBUG);
  3. av_log_set_callback(log_callback);
  4. avformat_network_init();
  5. ret = avformat_open_input(&formatCtx, url, NULL, NULL);
  6. NSLog(@" avformat_open_input ret= %d", ret);
  7. if (ret < 0) {
  8. NSLog(@" avformat_open_input error= %d", ret);
  9. return  ret ;
  10. }
  11. ret = avformat_find_stream_info(formatCtx,  NULL);//在此卡住了,
  12. NSLog(@" avformat_find_stream_info ret= %d", ret);
  13. if (ret < 0) {
  14. NSLog(@" avformat_find_stream_info error= %d", ret);
  15. return  ret;
  16. }

解决方法:

指定为TCP传输。

[objc] view plaincopy

  1. AVDictionary* options = NULL;
  2. av_dict_set(&options, "rtsp_transport", "tcp", 0);
  3. ret = avformat_open_input(&formatCtx, url, NULL, &options);

参考链接:

http://www.bkjia.com/IOSjc/874706.html

转载:http://blog.csdn.net/fb731666148/article/details/44408379

时间: 2024-11-10 12:02:11

avformat_find_stream_info函数卡住问题的相关文章

FFmpeg avcodec_parameters_to_context函数剖析

函数说明    将AVCodecParameters结构体中码流参数拷贝到AVCodecContext结构体中,并且重新拷贝一份extradata内容,涉及到的视频的关键参数有format, width, height, codec_type等,这些参数在优化avformat_find_stream_info函数的时候,手动指定该参数通过InitDecoder函数解码统一指定H264,分辨率是1920*1080 int avcodec_parameters_to_context(AVCodecC

FFMPEG Tips (2) 如何提取码流的基本信息

本文是我的<FFMPEG Tips>系列的第二篇文章,上篇文章<FFMPEG Tips (1) 如何打印日志>主要分享了如何利用 ffmpeg 库打印日志,而本文则主要分享一下如何利用 ffmpeg 库拿到码流的一些基本信息. 1.  码流中的哪些信息值得关注 ? [ ] 是否包含:音频.视频 [ ] 码流的封装格式 [ ] 视频的编码格式 [ ] 音频的编码格式 [ ] 视频的分辨率.帧率.码率 [ ] 音频的采样率.位宽.通道数 [ ] 码流的总时长 [ ] 其他 Metada

解密H264、AAC硬件解码的关键扩展数据处理

通过上一篇文章,我们用ffmpeg分离出一个多媒体容器中的音视频数据,但是很可能这些数据是不能被正确解码的.为什么呢?因为在解码这些数据之前,需要对解码器做一些配置,典型的就是目前流行的高清编码"黄金搭档"组合H264 + AAC的搭配.本文将讲述H264和AAC的关键解码配置参数的解析,如果没有这些配置信息,数据帧往往不完整,导致了解码器不能解码. H264的配置信息解析 前面我们知道,ffmpeg的avformat_find_stream_info函数可以取得音视频媒体多种,比如播

解密硬件解码关键技术

通过上一篇文章,我们用ffmpeg分离出一个多媒体容器中的音视频数据,但是很可能这些数据是不能被正确解码的.为什么呢?因为在解码这些数据之前,需要对解码器做一些配置,典型的就是目前流行的高清编码“黄金搭档”组合H264 + AAC的搭配.本文将讲述H264和AAC的关键解码配置参数的解析,如果没有这些配置信息,数据帧往往不完整,导致了解码器不能解码. H264的配置信息解析 前面我们知道,ffmpeg的avformat_find_stream_info函数可以取得音视频媒体多种,比如播放持续时间

ffmpeg中关于ffplay部分的概要分析-1

ffplay是ffmpeg中的一个播放音视频流的功能,现简要对其进行分析: 1. 图1是ffplay的主干代码流程 1)在stream_open函数之前,主要是对入参的一些分析,所有codec,demux以及相关protocool的注册 注册两个信号量:一个是给中断使用,一个是给终端操作使用(比如键盘,鼠标等的一些动作) 2)在stream_open函数中,先是对video,audio,subtitle三个format的消息队列进行初始化, 再对收发数据的队列进行初始化.然后调用SDL_Crea

上交大 2011 二次方程计算器

题目:输入关于x的二次方程表达式(系数为整数),输出两个解(由小到大输出,保留两位小数);如果无解,则输出"No Solution". 思路:先确定等号位置,分成左右两个字符串,从中分别提取系数,再综合.然后求解.提取系数的过程如图: 过程:介绍两个函数:atoi()函数可以识别"+""-"号,并正确转化成int. string str="-2980"; string s="+12"; cout<&l

【FFMpeg视频开发与应用基础】四、调用FFmpeg SDK解析封装格式的视频为音频流和视频流

<FFMpeg视频开发与应用基础--使用FFMpeg工具与SDK>视频教程已经在"CSDN学院"上线,视频中包含了从0开始逐行代码实现FFMpeg视频开发的过程,欢迎观看!链接地址:FFMpeg视频开发与应用基础--使用FFMpeg工具与SDK 工程代码地址:FFmpeg_Tutorial 我们平常最常用的音视频文件通常不是单独的音频信号和视频信号,而是一个整体的文件.这个文件会在其中包含音频流和视频流,并通过某种方式进行同步播放.通常,文件的音频和视频通过某种标准格式进行

硬件解码关键技术剖析

通过上一篇文章,我们用ffmpeg分离出一个多媒体容器中的音视频数据,但是很可能这些数据是不能被正确解码的.为什么呢?因为在解码这些数据之前,需要对解码器做一些配置,典型的就是目前流行的高清编码"黄金搭档"组合H264 + AAC的搭配.本文将讲述H264和AAC的关键解码配置参数的解析,如果没有这些配置信息,数据帧往往不完整,导致了解码器不能解码. H264的配置信息解析 前面我们知道,ffmpeg的avformat_find_stream_info函数可以取得音视频媒体多种,比如播

ffmepg (avformat.h里的说明)

Libavformat (lavf)是用于处理多种媒体容器格式的库. 其主要目的有两个:一是多路分配(demuxing)分离一个流媒体文件成多个组件 :二是多路复用的反转过程,将提供的数据写进指定容器格式. 其也有一个IO模块,支持多种协议访问数据(例如:file,tcp,http 等等 ).在使用lavf之前,我们需要调用 av_register_all()来注册所用已编译的muxers and demuxer(多路)信号分离器 和协议(protocols). 除非你明确你将不会用到libav