问题原因:由于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 |