C # wpf, как транслировать веб-камеру на IP-адрес (возможно, с Vlc) - PullRequest
0 голосов
/ 12 октября 2018

Мне нужно для потоковой передачи веб-камеры по IP-адресу.После нескольких дней поисков я решил, что самый простой способ - встроить VLC.Тем не менее, я также все еще открыт для других решений.


Шаг 1 - ОК !: Я вижу свою веб-камеру в форме, используя этот код:

vlcPlayer.MediaPlayer.VlcLibDirectory = new DirectoryInfo(@"c:\Program Files (x86)\VideoLAN\VLC\");
vlcPlayer.MediaPlayer.EndInit();
vlcPlayer.MediaPlayer.Play(new Uri(@"dshow://");

Step2 - OK !: Теперь, пытаясь сделать шаг вперед и используя этот учебник , я могу отправить видео локально 127.0.0.1:5004, используя 2 экземпляра Vlc: один для передачи и один для получения.


Шаг 3 - НЕ ОК: может показаться простым настроить vlc для переключения источника с файла на веб-камеру и передачи его через ip.Итак, что я делаю, это работаю, как и прежде, только меняя источник: 1. Меню «Медиа» -> Поток.Откроется окно «Открыть мультимедиа».

Здесь я нажимаю устройство захвата вкладок -> имя видеоустройства -> Я выбираю «встроенную веб-камеру»

Затемвсе остальное как прежде.Но ничего не происходит.Ресивер черный, внутри ничего нет.Также, если я пытаюсь сохранить поток от получателя, я получаю только несколько байтов.Вышеупомянутые настройки для передатчика следующие:

Вкладка устройства захвата -> встроенная веб-камера.Затем кнопка потока -> окно открывается правильно с dshow: \ -> далее -> новый целевой RTP, транспортный поток MPEG ---> кнопка добавления -> адрес = 127.0.0.1 порт = 5004 StreamNAme = test

Так странно, что когда я передаю файл с каким-либо именем из передатчика, он сразу же распознается получателем.Вместо этого, как я мог бы попытаться, ничего не происходит, когда веб-камера является источником.Меня волнует не то, как использовать vlc отдельно, а как использовать его из моего приложения wpf для отправки потока веб-камеры.

Спасибо за любую помощь

Патрик

1 Ответ

0 голосов
/ 13 октября 2018

Я считаю, что образец должен помочь вам в достижении вашей цели:

static void Main()
{
    var currentDirectory = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);
    // Default installation path of VideoLAN.LibVLC.Windows
    var libDirectory =
        new DirectoryInfo(Path.Combine(currentDirectory, "libvlc", IntPtr.Size == 4 ? "win-x86" : "win-x64"));

    using (var mediaPlayer = new Vlc.DotNet.Core.VlcMediaPlayer(libDirectory))
    {

        var mediaOptions = new[]
        {
            ":sout=#rtp{sdp=rtsp://127.0.0.1:554/}",
            ":sout-keep"
        };

        mediaPlayer.SetMedia(new Uri("http://hls1.addictradio.net/addictrock_aac_hls/playlist.m3u8"),
            mediaOptions);

        mediaPlayer.Play();

        Console.WriteLine("Streaming on rtsp://127.0.0.1:554/");
        Console.WriteLine("Press any key to exit");
        Console.ReadKey();
    }
}

Вам понадобятся 2 пакета nuget: Vlc.DotNet (оболочка C #) и VideoLAN.LibVLC.Windows (Библиотека LibVLC для Windows).

...