2

我正在尝试用 c# 编写一个客户端-服务器视频流应用程序,并且我正在使用 libvlc。客户端工作正常,但我不确定我该如何做服务器。就像客户端一样,修改了媒体的 AddOptions 方法?然后播放媒体?

更新:我试过这个:

    private void button1_Click(object sender, EventArgs e)
    {
        //MyLibVlc vlc = new MyLibVlc();
        string[] args = new string[] { "-I", "dummy", "--ignore-config","" };
        instance = new VlcInstance(args);
        //:sout=#rtp{dst=79.114.124.180,port=5004,mux=ts,ttl=1} :sout-keep
        player = null;
        string source = "D:\\CM.mp4" ;
        VlcMedia media = new VlcMedia(instance, source);
        string[] options=new string[]{":sout=#rtp{dst=79.114.124.180,port=5004,mux=ts,ttl=1} :sout-keep"};
        media.AddOptions(options);
        if (player == null)
        {
            player = new VlcMediaPlayer(media);
        }
        else
        {
            player.Media = media;
        }
        player.Play();

    }

我查看了日志文件。无法打开文件...我以错误的方式传递了 arg,或者缺少某些东西。

4

3 回答 3

2

我知道这是一个很久以前的问题,但它仍然有超过 1k 的浏览量,所以也许有人会像我一样在查看和测试几个小时后需要它。

“就好像客户端,修改媒体的AddOptions方法?然后播放媒体?”

是的。您只需要修改媒体 AddOptions。

“我查看了日志文件。无法打开文件......我以错误的方式传递了 arg,或者缺少某些东西。”

这是我成功测试的示例选项。请注意,对于您的情况,某些选项可能会很丰富。

media.AddOption(":sout=#transcode{vcodec=h264,vb=0,scale=0,acodec=mp4a,ab=128,channels=2,samplerate=44100}:rtp{mux=ts,sdp=rtsp://192.168.1.123:554/stream.sdp}");

media.AddOption(":sout-keep");

在创建媒体时,我还需要提供确切的 FromType 参数。

var media = new Media(libVlc, "C:\\foo.avi", FromType.FromPath);

如果您想从其他来源(例如另一个 RTSP 来源)进行流式传输,那么它将是:

var media = new Media(libVlc, "rtsp://192.168.1.234:555/live/0/MAIN", FromType.FromLocation);
于 2020-03-10T02:33:48.163 回答
0

这是一个完整的示例,演示如何使用 LibVLCSharp 流式传输视频:

using System;
using LibVLCSharp.Shared;

namespace VlcStreaming
{
    class Program
    {
        static void Main(string[] args)
        {
            var serverIpAddress = "192.168.1.101";
            var streamUrl = $"rtsp://{serverIpAddress}:554/stream.sdp";

            LibVLCSharp.Shared.Core.Initialize();

            var libVlc = new LibVLC();
            var media = new Media(libVlc, "fe48f269-4f89-4c58-afd4-04c2e2e3f10f.MP4");

            media.AddOption(
                $":sout=#transcode{{vcodec=h264,vb=0,scale=0,acodec=mp4a,ab=128,channels=2,samplerate=44100}}:rtp{{mux=ts,sdp={streamUrl}}}");
            media.AddOption(":sout-keep");

            var player = new MediaPlayer(media);

            player.Play();

            Console.ReadLine();
        }
    }
}

您需要为您的平台安装LibVLCSharp库以及 LibVlc 库(在我的情况下为VideoLAN.LibVlc.Windows)。

然后,您可以从 VLC 播放器连接到流 URL(如果从另一台机器等连接,则需要打开端口 554)。

于 2021-06-19T09:53:11.177 回答
0

关于 AddOption / Options.. 请注意,您必须分开每个选项,并且不要使用 Vlc-Media-Mplayer 给定的格式(可能会令人困惑!),收到的错误不会帮助您弄清楚!

所以,如果 Vlc-ML 选项是,

例如

":sout=#rtp{dst=127.0.0.1,port=12345,mux=ts} :no-sout-all :sout-keep"

他们必须分开:

            media = new Media(m_libVlc, p_fileInfo.FullName, FromType.FromPath, 
                @":sout=#rtp{dst=127.0.0.1,port=12345,mux=ts}",
                @":no-sout-all", 
                @":sout-keep");

希望这对其他人有所帮助(在#cube45 的帮助下,我花了很长时间才弄清楚 :)

于 2021-11-03T13:27:57.240 回答