bccarey Ответов: 1

В C# как отобразить потоковое видео H264 TS в виде проекта


У меня есть существующий проект формы C#, в котором меня попросили добавить возможность отображения потокового видео, выводимого другим процессом.
Видео представляет собой поток кодирования H264/TS.
Я читал о emguCV (рэпер вокруг в формате OpenCV), твердый пакет ffmpeg (ffmpeg с оберткой) и тогда есть обертка вокруг с DirectShow, а также. Если бы мне нужно было только декодировать видеопоток H264TS, что бы вы порекомендовали мне использовать, и знаете ли вы пример, который его использует.
Я даже подумывал о том, чтобы читать поток напрямую и декодировать его самостоятельно, а не использовать стороннюю dll.

Заранее спасибо за любые предложения.

1 Ответов

Рейтинг:
8

Sergey Alexandrovich Kryukov

Я не уверен на 100%, что будет работать, просто потому, что я использую много различных контейнеров и форматов, и у меня всегда есть самое свежее программное обеспечение поддержки, поэтому для меня трудно понять, что должно произойти, если вы все это настроили с нуля. Поэтому, пожалуйста, поймите это и просто попробуйте следовать моим предложениям и скажите мне, есть ли тот или иной вариант.

Первый вариант - внедрить существующий элемент управления проигрывателем Windows Media. Вот как это можно сделать: Как встроить Проигрыватель Windows Media в форму[^].

Другим подходом было бы встраивание WPF player System.Windows.Media.MediaPlayer:
Класс MediaPlayer (System.Окна.Средства массовой информации)[^].

Размещение элемента управления WPF в приложении Forms требует некоторых дополнительных усилий. Во многих случаях это можно рассматривать как своего рода перебор. Вот как это можно сделать: Пошаговое руководство: размещение составного элемента управления WPF в Windows Forms[^].

Теперь проблема заключается в поддержке вашего потока. Если у вас уже есть правильно организованная сетевая потоковая передача, вы просто устанавливаете правильный URI в плеере. Проблема может заключаться в поддержке вашего контейнера и кодеков для H264. Честно говоря, я никогда не помню, какие версии Windows связывают какие кодеки по умолчанию, я просто никогда не полагаюсь на это; я могу только сказать, что "родная" поддержка Windows была почти рудиментарной; я никогда не считал ее сколько-нибудь приличной. Для работы с Windows player можно устранить проблему поддержки кодеков, установив пакет кодеков. Обычно я рекомендую очень полный пакет кодеков K-Lite:
K-Lite Codec Pack — Википедия, свободная энциклопедия[^],
Руководство по кодеку: K-Lite Codec Pack — для Windows 10 / 8.1 / 7 / Vista / XP[^].

(Одно бортовое примечание: обратите внимание на Медиаплеер Классический Домашний Кинотеатр который приходит вместе с ним. Я думаю, что он бесконечно лучше любого игрока Microsoft, но, возможно, это дело вкуса. :-))
Теперь еще одна альтернатива-не полагаться ни на один проигрыватель Microsoft. Одним из таких продуктов является VLC (Video LAN):
Видеолан — Википедия, свободная энциклопедия[^],
VideoLAN — VLC: официальный сайт — бесплатные мультимедийные решения для всех ос![^].

Он не зависит от кодеков, установленных в Windows, он размещает их сам, потому что он основан на библиотеке libav (а также FFMpeg). Пожалуйста смотрите для получения более подробной информации:
Видеолан — Википедия, свободная энциклопедия[^],
libavcodec — Википедия, свободная энциклопедия[^],
Видео[^],
https://en.wikipedia.org/wiki/FFmpeg[^],
Видео[^].

Вы можете использовать оболочку .NET для использования в вашем приложении. Пожалуйста смотрите:
libvlc.net скачать | SourceForge.net[^],
C Sharp — VideoLAN Wiki[^],
ZeBobo5/Vlc.DotNet — C# — GitHub[^].

Кстати, VLC также можно использовать как сам потоковый сервис (и имеет много других применений — это на самом деле не просто плеер). Пожалуйста, посмотрите мои прошлые ответы:
нужна помощь в получении потокового видео с другого компьютера в C#[^],
Предварительный просмотр выбранного файла в Проводнике Windows с помощью C#[^],
Потоковая передача музыкальных файлов в vb.net без WMP[^].

—СА


bccarey

Крюков,
Спасибо Вам за всю информацию. Я много читал об этом, но то, как вы это изложили, делает все, что я читаю, более осмысленным.
Вы не только ответили на мой вопрос о том, что использовать, я думаю, что вы также ответили на вопрос о том, что такое различные видеорешения.
В настоящее время я рассматриваю возможность использования ffmpeg, потому что вчера мне также сказали, что им понадобится мой код, чтобы выложить каждый кадр в виде картинки.

Для тех, кто еще читает это в будущем, я нашел следующую ссылку после прочтения ответа Крюкова и сосредоточения внимания на ffmpeg, который, как я думаю, вы можете найти полезным, если хотите написать свою собственную оболочку, как я.
https://jasonjano.wordpress.com/2010/02/09/a-simple-c-wrapper-for-ffmpeg/


Еще раз благодарю вас за ваш ответ.

Sergey Alexandrovich Kryukov

Мы всегда рады вам. Спасибо за ссылку.
Удачи, звоните еще раз.
—СА