我正在Xamarin.Forms应用程序中实现一个RTSP播放器。在停止流之前,视频在VideoView中播放60秒。根据Videolan命令行帮助,默认的rtsp超时是60秒。我无法使用提供的各种选项格式覆盖此选项。
我已经尝试在LibVLC构造函数中和通过媒体的AddOptions方法使用-和:前缀添加以下选项,但都没有结果:-rtsp-tcp-rtsp-timeout=300-rtsp流-超时值=300-sout-保持
下面的用法示例:
readonly LibVLC _libvlc;
public VideoPage()
{
InitializeComponent();
Core.Initialize();
_libvlc = new LibVLC(new string[] { "--rtsp-timeout=300" });
ShowVideo();
}
private void ShowVideo()
{
var stream = "rtsp://1.2.3.4:1234/MyStream";
using (var media = new Media(_libvlc, stream, Media.FromType.FromLocation))
{
var config = new MediaConfiguration();
config.EnableHardwareDecoding();
media.AddOption(":rtsp-timeout=300");
media.AddOption(config);
VideoView0.MediaPlayer = new MediaPlayer(_libvlc);
VideoView0.MediaPlayer.Play(media);
}
}我预计流将保持打开,视频将在给定的超时时间内继续播放,但在60秒后停止。如能提供任何帮助,将不胜感激!
编辑
服务器似乎有60秒的超时时间。我无法控制这一点,所以解决方案需要来自客户端。如何发送一个备存/RR数据包,通知服务器保持连接处于打开状态?
发布于 2019-01-15 07:21:27
RTSP一般基于TCP协议,RTP基于UDP协议。因此,理想情况下,这两个通道都需要保持活动功能。
如果服务器设置了在安装程序响应中收到的超时值。
Session = "Session" ":" session-id [ ";" "timeout" "=" delta-seconds ]想要保持与RTSP服务器的连接,
客户端还需要定期发送任何RTSP请求(选项、SET_PARAMETER或GET_PARAMETER),然后在安装程序响应中接收timeout值。
这是细部讨论关于这件事。
发布于 2021-04-20 20:39:40
我在书签上写了一个问题很长一段时间了,再也没花时间跟你联系(而且是最诚实的,完全忘记了这个问题的存在)。今天,有人问了我这个问题。这实际上是来自libvlc的一个bug,刚刚在这里报告过:https://code.videolan.org/videolan/vlc/-/issues/25662
我很想知道你们相机的牌子。
临时的解决办法是用更大的超时重新构建自己的libvlc版本(修补程序包含在bug报告中)。
https://stackoverflow.com/questions/54143570
复制相似问题