0

我正在 Xamarin.Forms 应用程序中实现 RTSP 播放器。在视频流停止之前,视频会在 VideoView 中播放 60 秒。根据Videolan 命令行帮助,默认 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 数据包?

4

2 回答 2

0

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

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

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

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

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

这是关于它的详细讨论

于 2019-01-15T07:21:27.517 回答
0

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

我很想知道你们相机的品牌。

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

于 2021-04-20T20:39:40.917 回答