发送 RTSP 验证 C#

Send RTSP Authentication C#

我只是想用 C#(windows 形式)编写一个程序来播放来自获取的受密码保护的 URI 的视频。该程序的重​​点是使用 SOAP 和其他方式定位 URI,以便流式传输特定视频源。我不知道该项目最困难的部分只是播放视频。我假设必须有图书馆可以处理这个问题。虽然有很多可以播放视频的方法,但我正在努力弄清楚如何使用身份验证处理 RTSP 流。

尝试使用用户名和密码格式化 URI 对象。这会引发错误的格式错误。即使最终结果遵循 Wiki“IsWellFormedUriString”的良好格式,仍然会引发错误。

        local_uri.Host = deviceUri.Host;
        local_uri.Port = 554;
        local_uri.Scheme = "rtsp";
        local_uri.Password = "admin";
        local_uri.UserName = "admin";
        //List full URI info. 
        infoBox.Text = local_uri.ToString();

        //Past it to VideoView and start playing video. 
        bool check = Uri.IsWellFormedUriString(local_uri.Uri.ToString(), UriKind.RelativeOrAbsolute);
        bool check = true;

        if (check)
        {
            //_mp is of type LibVlcSharp.Shared.MediaPlayer
            _mp.Play(new Media(_libVLC, local_uri.Uri));
            check = false;
        }
        else
            check = false; 

我已经厌倦了让 VLC 库的折旧版本正常工作,但似乎 运行 遇到了同样的问题。查看 c# VLC lib 并没有找到任何明显可以处理授权的函数。然后我开始尝试编写代码来处理、缓冲和播放数据。我认为这将是不可能的,因为它是多么耗时,并且考虑到这项任务的时间限制。

我知道我返回的 URI 是有效的。我可以打开 VLC 和整个 URI。片刻之后弹出以下内容...

输入后,我看到一个 RTSP 包发送到 URL...

 DESCRIBE rtsp://192.168.1.64:554/Streaming/Channels/101?transportmode=unicast&profile=Profile_1 RTSP/1.0
    CSeq: 7
    Authorization: Digest username="admin", realm="IP Camera(C6990)", nonce="61218496a6adcf4869f748505626d63a", uri="rtsp://192.168.1.64:554/Streaming/Channels/101?transportmode=unicast&profile=Profile_1", response="3cce04175b5b1a3d0a6a8dcfea9d377a"
    User-Agent: LibVLC/3.0.11 (LIVE555 Streaming Media v2016.11.28)
    Accept: application/sdp

然后当然 URL 响应 200 Ok 并开始流式传输。如果我能弄清楚如何在 C# 中重新创建此事件,那就太好了。我有做一个对话 API 的建议,但无法弄清楚如何使用 VLC 对象来解决这个问题。任何方向将不胜感激。事后看来,我不应该选择其他项目,因为这与我的成绩有关。

事实证明(我不完全确定为什么)但只要您的密码不包含任何会导致字符串格式错误的内容,上面的代码就可以正常工作。例如,密码不能包含带有上述代码的“@”符号。我确定有一个解决方法,但还没有弄清楚它是什么。