最近在调试的时候总是发现av_read_frame()返回AVERROR_EOF,但是我这是网络传输rtsp,怎么会是文件结尾呢,网络上搜了一下没结果,只能自己看源码了,结果发现在tcp_read中recv返回0:

static int tcp_read(URLContext *h, uint8_t *buf, int size)
{TCPContext *s = h->priv_data;int ret;if (!(h->flags & AVIO_FLAG_NONBLOCK)) {ret = ff_network_wait_fd_timeout(s->fd, 0, h->rw_timeout, &h->interrupt_callback);if (ret)return ret;}ret = recv(s->fd, buf, size, 0);if (ret == 0)//结果在这里return AVERROR_EOF;return ret < 0 ? ff_neterrno() : ret;
}

关于recv为什么会返回0,可以参考下面链接:
https://blog.csdn.net/keheinash/article/details/52069471?utm_medium=distribute.pc_relevant.none-task-blog-2defaultBlogCommendFromMachineLearnPai2default-1.control&dist_request_id=&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2defaultBlogCommendFromMachineLearnPai2default-1.control

截取一段:
那么返回值为0表示什么意思?答案是当对端关闭了socket的时候(是真正地关闭,会引发四次握手,而不是减少引用),我们再去调用recv读取数据,会返回0。
也就是说当你拉流发现返回AVERROR_EOF,说明rtsp服务端主动关闭了端口

那么rtsp服务端为什么会主动关闭发送端口呢?
因为它检测到你掉线了,至于怎么检测的可以参考:
https://www.cnblogs.com/youxin/p/4056041.html
一般发生这种情况说明你的网络很差,或者你网线接触不良。

所以,当你av_read_frame()返回AVERROR_EOF,那是因为rtsp服务端检测到你掉线了,close了socket,你这边四次挥手的时候收到了0,av_read_frame()返回AVERROR_EOF,明白没有。

ffmpeg av_read_frame返回AVERROR_EOF相关推荐

  1. ffmpeg avformat_open_input返回失败的解决办法

    用ffmpeg做的第一个程序,参考网上的代码,就出现了一些问题,其中avformat_open_input返回失败. 下面是我在网上收集到的失败信息的相关解决: 很多朋友在使用新版本的ffmpeg时, ...

  2. ffmpeg av_read_frame函数解析

    av_read_frame的作用是读取一帧视频数据或者读取多帧音频数据,读取的数据都是待解码的数据,该函数的流程如下所示: 函数的源码如下所示: int av_read_frame(AVFormatC ...

  3. ffmpeg avformat_open_input返回失败,错误码-10049

    ffmpeg avformat_open_input失败,返回错误码-10049,错误描述:Error number -10049 occurred 调试代码,找到如果设置了time_out参数,就会 ...

  4. ffmpeg中av_read_frame阻塞的原因与解决方案

    最近用到ffmpeg,想要av_read_frame立即返回,但是看网上的博客,都没有详细的解说,那就自己看源码. 两种方法: 设置回调打断函数和设置超时 超时,但是如果只设置该参数,依然会在av_r ...

  5. ffmpeg函数分析:av_read_frame()

    对于视频的编解码来说,要对数据进行解码,那么首先要获取视频帧的压缩数据. av_read_frame()的作用就是获取视频的数据. 注:av_read_frame()获取视频的一帧,不存在半帧说法.但 ...

  6. FFMPEG之编码实现RTMP循环推流(附带av_interleaved_write_frame返回-22处理)04

    FFMPEG之编码实现RTMP循环推流(附带av_interleaved_write_frame返回-22处理) 前言 本篇是参考雷神的推流进行二次处理的,可以参考雷神这篇博客.[最简单的基于FFmp ...

  7. FFMpeg.AutoGen(1)讲解官方example代码:Main函数、 解码

    FFMpeg是一套C编译的开源工具集.主要用于视频处理,可以编解码视频,建立流媒体服务器等等.官方网站:http://ffmpeg.org/ FFMpeg.AutoGen封装方法以方便C#调用FFmp ...

  8. MP4/MP3解封装ffmpeg(十三)

    前言 解封装包括很多层步骤,包括协议的解析,封装格式的解析.ffmpeg中,本地文件当做file://协议来解析,远程文件采用的传输协议有http(s),rtsp等等.封装格式比如MP4,MOV,TS ...

  9. ffmpeg命令分析【详细分析合集】

    ffmpeg命令分析[内容包括]-vf/ac/b:v/r/re/segment/t/ss/output_ts_offset/vn/acc/print/yuv420p/yuv封装mp4/FFmpeg硬件 ...

最新文章

  1. HIVE QL 杂记
  2. Javascript事件模型系列(二)事件的捕获-冒泡机制及事件委托机制
  3. python面向对象继承_四. python面向对象(继承)
  4. 常用HTML转义字符,html转义符,JavaScript转义符,html转义字符表,HTML语言特殊字符对照表(ISO Latin-1字符集)...
  5. python查找多个关键词,在字符串列表中搜索多个关键字
  6. VPX单板计算机xPower 6110
  7. 前馈-反馈控制系统设计(过程控制课程设计matlab/simulink)
  8. Ani网页木马生成器
  9. 我被List中remove()方法的陷阱,坑惨了!
  10. 微信小程序--点击水波涟漪效果
  11. Java基础恶补——内存泄露、内存溢出
  12. 【错误处理】RuntimeError: Attempting to deserialize object on CUDA device 1 but torch.cuda.device_count
  13. 远程服务器返回错误: (500) 内部服务器错误解决办法
  14. 办公室养龟有什么讲究,办公室养龟风水
  15. 关于surface laptop3 无法连接显示器问题解决方案
  16. amber中生成小分子模板
  17. i219v驱动linux下载,Ubuntu 16.04 Intel I-219V卡网驱动问题
  18. WiMi:使用商品Wi-Fi设备识别目标材料
  19. python自动化(一)基础能力:3.python基础上之数据类型,函数,面向对象
  20. OpenFOAM修改湍流模型之后出现#duplicate entry的解决办法

热门文章

  1. matlab 摄动波浪理论,基于MATLAB的三维海浪模型数值仿真_齐宁.pdf
  2. 软件观点 - 软件工厂方法
  3. 基于51单片机的智能家居环境监测系统
  4. jquery-mobile制作的手机网站
  5. clock gating check
  6. IT企业如何实行末位淘汰制?
  7. 体坛周报20220130导读:体育本该成为家庭生活的必修课
  8. 【DL】第8章 序列到序列的映射
  9. CAD图在线Web测量工具代码实现(测量距离、面积、角度等)
  10. 三坐标检测之常用测针的定义及使用