FFMPEG 符 工 关于 RTSP问题解答

本文档探讨了FFmpeg在处理RTSP流时遇到的问题,即视频数据发送完成后,由于rtsp连接未主动断开导致的死循环。为解决此问题,提出了在rtsp协议中加入超时机制,当一段时间未收到数据时退出。然而,这种方法可能不够精确,需要优化处理超时条件。文中还展示了相关代码修改,涉及avio.c、aviobuf.c、rtsp.c和rtspdec.c等文件,以实现更准确的结束播放判断。
摘要由CSDN通过智能技术生成

 

问题原因:由于rtsp发送视频数据完成后,不会主动断开连接,
         rtp接收数据会一直receive again,导致死循环。
解决方案:在rtsp协议中加超时机制,一段时间没有收到数据,超时退出
存在问题:这样在没有收到数据做超时退出,可能导致退出不及时,不够
精确,需要优化处理(通过时常或文件大小,需要权衡)。
---
 .../av/LibPlayer/amffmpeg/libavformat/avio.c       | 32 ++++++++++++++--------
 .../av/LibPlayer/amffmpeg/libavformat/aviobuf.c    |  4 ++-
 .../av/LibPlayer/amffmpeg/libavformat/rtsp.c       |  7 +++--
 .../av/LibPlayer/amffmpeg/libavformat/rtspdec.c    |  1 +
 .../av/LibPlayer/amffmpeg/libavformat/url.h        |  1 +
 5 files changed, 30 insertions(+), 15 deletions(-)
 mode change 100644 => 100755 vendor/amlogic/frameworks/av/LibPlayer/amffmpeg/libavformat/avio.c
 mode change 100644 => 100755 vendor/amlogic/frameworks/av/LibPlayer/amffmpeg/libavformat/aviobuf.c
 mode change 100644 => 100755 vendor/amlogic/frameworks/av/LibPlayer/amffmpeg/libavformat/rtsp.c
 mode change 100644 => 100755 vendor/amlogic/frameworks/av/LibPlayer/amffmpeg/libavformat/rtspdec.c
 mode change 100644 => 100755 vendor/amlogic/frameworks/av/LibPlayer/amffmpeg/libavformat/url.h

 

参考之前写的文档 :  主要知道读调用过程: 

aviobuf.c  (avio_read) -> avio.c  (retry_transfer_wrapper) ->  rtsp.c (ff_rtsp_fetch_packet) 

主要思路是修改返回值为AVERROR_EOF 。 超时时间时候。 

 

 

 

 

 

关键点: ff_rtsp_fetch_packet  

 

 

 

 

 

 

 

 

 

 

 

 

^[[33mcommit 23eb7258ef0c3ed64e130060b0935a50a7f8b04b^[[m
Author: Fu bilong <fubilong@ws01.sen5.sz>
Date:   Fri May 25 17:18:07 2018 +0800

    [ffmpeg] 修改rtsp播放结束不能退出问题
 

 .../av/LibPlayer/amffmpeg/libavformat/avio.c       | 35 ++++----
 .../av/LibPlayer/amffmpeg/libavformat/aviobuf.c    |  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值