我正在Xamarin.Forms应用程序中实现RTSP播放器。在流停止播放之前,视频在VideoView中播放60秒。根据{{3}},默认rtsp超时为60秒。我无法使用提供的各种选项格式来覆盖它。
我已经尝试使用-,-和:前缀在LibVLC构造函数中以及通过媒体的AddOptions方法添加以下选项,但都无济于事: --rtsp-tcp --rtsp-timeout = 300 --rtsp-stream-timeout = 300 --sout-keep
下面的用法示例:
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秒的超时时间。我对此无能为力,因此解决方案需要来自客户端。我将如何发送一个keepalive / RR数据包,通知服务器保持连接打开?
答案 0 :(得分:0)
通常,RTSP基于TCP,而RTP基于UDP。因此理想情况下,两个通道都需要保持活动功能。
如果服务器设置了您在SETUP响应中收到的超时值。
Session = "Session" ":" session-id [ ";" "timeout" "=" delta-seconds ]
并希望与RTSP服务器保持活动连接,
客户端还需要在SETUP响应中收到timeout
值之前,定期发送任何RTSP请求(OPTIONS,SET_PARAMETER或GET_PARAMETER)。
答案 1 :(得分:0)
我有一段时间在我的书签里有这个问题,从来没有花时间回复你(老实说,完全忘记了这个问题的存在)。 今天,有人问我这个问题。这实际上是刚刚在此处报告的来自 libvlc 的错误:https://code.videolan.org/videolan/vlc/-/issues/25662
我有兴趣了解您的相机品牌。
临时解决方法是使用更大的超时时间重建您自己的 libvlc 版本(补丁包含在错误报告中)。