如何使用Xamarin.Forms中的LibVLCSharp将RTSP流的生存时间保持超过60s?

时间:2019-01-11 09:24:00

标签: c# xamarin.forms libvlc libvlcsharp

我正在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数据包,通知服务器保持连接打开?

2 个答案:

答案 0 :(得分:0)

通常,RTSP基于TCP,而RTP基于UDP。因此理想情况下,两个通道都需要保持活动功能。

如果服务器设置了您在SETUP响应中收到的超时值。

Session = "Session" ":" session-id [ ";" "timeout" "=" delta-seconds ]

并希望与RTSP服务器保持活动连接,

客户端还需要在SETUP响应中收到timeout值之前,定期发送任何RTSP请求(OPTIONS,SET_PARAMETER或GET_PARAMETER)。

这是the detail discussion

答案 1 :(得分:0)

我有一段时间在我的书签里有这个问题,从来没有花时间回复你(老实说,完全忘记了这个问题的存在)。 今天,有人问我这个问题。这实际上是刚刚在此处报告的来自 libvlc 的错误:https://code.videolan.org/videolan/vlc/-/issues/25662

我有兴趣了解您的相机品牌。

临时解决方法是使用更大的超时时间重建您自己的 libvlc 版本(补丁包含在错误报告中)。