Потоковая передача RTSP в веб-приложение (с использованием VLC 2.0)

Я работаю над веб-приложением, которое должно отображать потоковое видео с удаленного рабочего стола. Мы уже реализовали это, используя ffmpeg /ffserver и flowplayer, транскодируя RTSP в формат .flv, но это очень хрупко, и мои исследования привели меня к использованию версии VLC для командной строки.

Мой вопрос: Есть ли способ передать транскодированный RTSP (в виде OGG, RTP или другого формата) в браузер, избегая при этом использования флэш-памяти?

Я знаю, что тег не поддерживает потоковое видео в течение достаточно долгого времени, но у меня возникают проблемы с поиском согласованной документации. Некоторые говорят, что вы можете передавать RTP напрямую, другие говорят, что вы никогда не сможете передавать через тег.

Кроме того, в настоящее время я тестирую все это на своем локальном сервере Apache.

Я предполагаю, что транскодирование будет выглядеть примерно так:

  • vlc -vvv rtsp: //xx.xx.xx.xx: 554 /vga.sdp --no-sout-audio --sout '#standard {access = http, mux = ogg, dst = http: //localhost/test_ogg.php}

ИЛИ

  • vlc -vvv rtsp: //xx.xx.xx.xx: 554 /vga.sdp --no-sout-audio --sout '#transcode {vcodec = mp4v, acodec = mpga, vb = 400}: дублировать {ДСТ = дисплей, ДСТ = {MUX RTP = ц, ДСТ = xxx.xxx.xx.xx, порт = XXXX}} '

Спасибо - Мейсон

4 голоса | спросил MasonWinsauer 12 J0000006Europe/Moscow 2012, 01:56:13

1 ответ


0

Итак, решение, которое я искал, пришло в виде CVLC 2.0.1 [VLC-only-Console], но также использовало возможности мультиплексирования ffmpeg.

Этот однострочный код транскодирует поток RTSP в FLV и передает его на мой локальный сервер через указанный порт.

cvlc rtsp://xxx.xxx.xxx.xxx:554/vga.sdp :sout='#transcode{vcodec=FLV1,vb=2048,fps=25,scale=1,acodec=none,deinterlace}:http{mime=video/x-flv,mux=ffmpeg{mux=flv},dst=127.0.0.1:8090/device_1.flv}' :no-sout-standard-sap :ttl=5 :sout-keep :no-audio --video --no-sout-audio 

Преимущества этого состоят в том, что нет необходимости редактировать файл ffserver.conf каждый раз, когда поток изменяет разрешение, битрейт, частоту кадров и т. д. - только для перезапуска этой одной строки, чтобы он мог повторно захватить поток. Кроме того, если поток имеет правильные спецификации, вам не нужны vb= и fps= свойства; Я бы использовал их, только если бы мне нужно было ограничить поток ради веб-страницы.

--network-caching - еще одна особенность, которую я рассматривал, хотя и очень полезная в определенных ситуациях, но в моем случае она не нужна.

Код Flowplayer выглядит примерно так:

<div style="width:1280px;height:720px;margin:10px" id="player_1"></div><script language="javascript">
flowplayer("player_1", {src: "/js/flowplayer-3.2.7.swf", wmode:"transparent"},{
clip: {
  url: 'http://127.0.0.1:8090/device_1.flv',
  autoPlay: true,
  autoBuffering: true,
  live: true,
  bufferLength:0
}, 
plugins: { 
   controls: { 
      all: false,
      scrubber: true,
      play: true, 
      fullscreen: true, 
      time: false,
      width: '100%',
      opacity: 0.8,
      tooltips: {
        buttons: true,
        fullscreen: 'Enter fullscreen mode'
    }
   }
} 
});

Надеюсь, это поможет любому зрителю, сталкивающемуся с подобными проблемами!

Мейсон

ответил MasonWinsauer 18 J000000Wednesday12 2012, 23:35:53

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132