воспроизведение входящего видео потока - PullRequest
1 голос
/ 31 мая 2010

Я пишу приложение, которое является своего рода видео потоком. Клиент получает видеопоток с помощью сокета udp. Теперь, когда я получаю поток, я хочу воспроизвести его одновременно. Это отличается от воспроизведения локального видеофайла, лежащего в ваш жесткий диск, в этом случае это может быть так же просто, как запуск файла с помощью системы («vlc filename»). Но здесь возникает много проблем, таких как может быть задержка при получении, и игроку придется ждать поступающих данных. У меня есть узнайте об использовании vlc для запуска видеопотока. Можете ли вы описать шаг воспроизведения потока с помощью vlc.Я реализую свое приложение на c ++.

РЕДАКТИРОВАТЬ: Может ли кто-нибудь дать мне некоторое представление о API VLC, который можно использовать для потоковой передачи данного видео в конкретный пункт назначения и получения этого потока на другом конце, чтобы воспроизвести его.

с уважением, Mawia

Ответы [ 2 ]

2 голосов
/ 31 мая 2010

Ну, вы всегда можете взглянуть на собственную домашнюю страницу VideoLan Кроме этого, потоковая передача довольно проста:

  1. Выберите видеокодек, поддерживающий потоковую передачу. (хорошо очевидно и, вероятно, уже сделано)
  2. Выберите подходящий размер пакета.
  3. Выберите подходящее качество видео.
  4. На стороне клиента: предварительно буферизуйте не менее 2 секунд видео и аудио.

Числа 2 и 3 звучат странно, но о них стоит подумать:

Если у вас широкополосное соединение, вы можете позволить клиенту пересылать большие пакеты. Примечание. Под пакетами здесь подразумеваются согласованные единицы данных, которые клиент должен иметь полностью для декодирования следующего бита видео. Если вы отправляете большие пакеты, например, 4 секунды видео, вы рискуете запаздывать из-за ожидания полной единицы данных, ну, в общем, полных 4 секунд, в то время как небольшие пакеты по 0,5 секунды могут сделать вас медлительным, но все же узнаваемым и относительно быстрым видео на плохом подключение.

То же самое касается качества. Пиксельные и искаженные видео плохие, заикание видео / звукосинхронизирующие видео хуже. Скорее переключитесь на более низкое качество / более высокую настройку сжатия.

Если ваш вопрос касается только прохождения части, ну, пункты 1 и 4 должны помочь вам.

Вы можете спросить: "Если я хочу делать живое видео в реальном времени?" Все вышеперечисленные советы по-прежнему применимы, но все это нужно делать умнее. Перво-наперво: вы не можете делать в реальном времени через плохие соединения. Это реальность. Если ваше соединение достаточно толстое, вы можете достичь почти в реальном времени, просто накачайте каждое изображение и небольшой звуковой образец без особой обработки или какой-либо буферизации вообще. Из этого можно получить хороший опыт работы с клиентами, но такие подключения маловероятны. Хитрость здесь в том, чтобы передать качество видео, немного более низкое, чем то, которое теоретически позволяет соединение, и все же покачивать кеширование и переупорядочивание пакетов там ... получайте удовольствие. Это трудно.

0 голосов
/ 01 августа 2010

К сожалению, на самом деле единственным API vlc является командная строка или эквивалент командной строки (вы можете запускать экземпляры проигрывателя, передавая им, по существу, то, что вы должны иметь в командной строке). Вы можете использовать libvlc, если вам нужно несколько экземпляров или обратных вызовов, но это все еще непрозрачно ...

...