Vlc.Dotnet Play потоковая передача необработанных данных h264 на WPF

все. Я новичок в программировании и столкнулся с некоторыми трудностями при декодировании / воспроизведении видео.

У меня есть поток необработанных данных h264 от tcpsocket, и я хочу показать видео на WPF usercontrol.

Поскольку у меня мало знаний о C ++ и декодировании / кодировании видео, мне будет сложно использовать ffmpeg. Поэтому я подумываю, сможет ли VLC это сделать.

Фон: я хочу использовать сервер Scrcpy для создания собственного экрана Android приложение WPF для литья и удаленного управления.

Пока что я реализовал:

  • Отправьте сервер на устройство и запустите сервер
  • Установите TCP-соединение между ПК и устройством Android
  • Может видеть потоковую передачу необработанных данных h264 в сокете

Следующий шаг: показать видео на WPF usercontrol

На самом деле я пробовал другое решение раньше и могу получить то, что хочу

  • Используйте MPV в качестве медиаплеера
  • Запустить mpv.exe процесс в моем приложении с конкретными аргументами
  • Внедрить окно mpv в элемент хоста WPF

Но я думаю, что <WindowsFormsHost/> не идеально подходит для приложения WPF, поэтому я пытаюсь найти способ в стиле WPF.

Когда я искал в Github, я обнаружил, что проще воспроизвести медиафайл с диска или из Интернета, мне просто нужно передать местоположение файла (например, D:/MyFolder/mySampleVideo.mp4 или http://somesite/aSampleVideo.flv), и мне не нужно заботиться о том, как работает компонент / элемент. . Поставьте лайк этому проекту и этот проект

Если я использую VLC, как я могу напрямую воспроизводить необработанный поток данных h264? Есть такой метод, как VlcPlayer.Play(NetworkStream myh264stram) {...}?


person Vveeb    schedule 24.07.2020    source источник
comment
Благодарим за интерес к Vlc.DotNet, но, пожалуйста, убедитесь, что вы прочитали предупреждающие сообщения в Readme: - Проект перешел в режим обслуживания - В этой части я сожалею о том, что сделал настоящее управление видео WPF: github.com/ZeBobo5/   -  person cube45    schedule 24.07.2020


Ответы (1)


Но я думаю, что это не идеально для приложения WPF, поэтому я пытаюсь найти способ в стиле WPF.

Решение использования WindowsFormsHost в приложении WPF - лучшее, что мы нашли для WPF, потому что реализация решения с истинным WPF не дает хороших характеристик: https://github.com/ZeBobo5/Vlc.DotNet#writing-a-wpf-app-migrating-wpf-control-from-2x

Тем не менее, если вы все еще хотите продолжить работу с Vlc.DotNet (которая была переведена в режим обслуживания), вам, вероятно, потребуется указать демультиплексор, который вы хотите использовать libvlc с "--demux", "h264" в VlcMediaPlayerOptions

Тогда вы действительно могли бы позвонить

   mediaPlayer.Play(stream);

С LibVLCSharp процедура совершенно такая же, но мы используем класс MediaInput для хранения ссылки на Stream, см .: https://github.com/mfkl/lvst/blob/master/LVST/Program.cs#L72

using var mediaInput = new StreamMediaInput(stream);
using var media = new Media(libVLC, mediaInput);
using var mediaPlayer = new MediaPlayer(media);

см. также: C # LibVLCSharp player direct feed media

person cube45    schedule 24.07.2020
comment
Большое спасибо за ваш пост, теперь я могу легко создать образец проекта для воспроизведения локального медиафайла, следуя руководству по началу работы (хотя это занимает у меня полдня) в LibVLCSharp! Следующим шагом я попробую потоковое воспроизведение. - person Vveeb; 27.07.2020
comment
И эта проблема с воздушным пространством - это именно то, что я встречал раньше, когда использовал WindowsFormsHost. Поэтому я сказал, что: WindowsFormsHost способ не идеален. - person Vveeb; 27.07.2020
comment
Вы можете себе представить, мое приложение - это всего лишь часть всего проекта (как текстовый редактор в Visual Studio), а мой текстовый редактор (мой видеоэлемент) всегда блокирует другие представления (всплывающее окно + всплывающее окно). А потом я увидел в руководство: мы решили реализовать элемент управления WPF с третьим решением. Итак, заранее вопрос: будет ли <lvs:VideoView> вести себя так, как я ожидал, если я использую LibVLCSarp? - person Vveeb; 27.07.2020
comment
Прочтите документ LVS WPF. Короче говоря, если вы хотите разместить контент поверх видео, поместите его в тег управления, и он будет отображаться в невидимом окне поверх видео. - person cube45; 27.07.2020