问题原因:由于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 | 4 +-
.../av/LibPlayer/amffmpeg/libavformat/rtsp.c | 13 +--
.../av/LibPlayer/amffmpeg/libavformat/rtspdec.c | 3 +-
.../av/LibPlayer/amplayer/player/player.c &nb

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

被折叠的 条评论
为什么被折叠?



