6

Это довольно простой вопрос, но я не могу найти ответ. Мне нужно выполнить потоковую передачу с устройства захвата на сервер, а затем на сервере FFMPEG перекодировать поток, подходящий для HLS.

Но как мне это сделать? Я посмотрел на Flash Media Live Encoder, VLC и ffserver, но не могу понять, как это должно работать. По сути, мне просто кажется, что мне нужна программа для отправки на сервер, которая принимает поток (и, возможно, некоторую аутентификацию пользователя), а затем делает поток доступным для использования. У меня уже есть система, которая принимает файлы и кодирует их для HLS, поэтому я могу в качестве входного параметра указать это приложение на локальном сервере, чтобы взять поток и начать кодирование.

редактировать: это действительно только шаг, чтобы принять, например, соединение rtmp и сделать его доступным для FFMPEG на том же сервере. Я надеялся, что, например, ffserver сможет это сделать, но я так не думаю.

3 ответа3

3

Может быть, этот рабочий пример может помочь вам немного дальше.

Он транслирует прямую трансляцию (веб-камеру) через vlc на веб-страницу в формате hls. Веб-камера может быть с любого другого живого потокового устройства или карты захвата. Веб-страница использует специальные функции потоковой передачи HTML5.

cvlc v4l2:// :v4l2-vdev="/dev/video0" --sout '#transcode{vcodec=h264,vb=512,scale=1,acodec=none,venc=x264{aud,profile=high,level=60,keyint=15,bframes=0,ref=1,nocabac}}:duplicate{dst=std{access=livehttp{seglen=10,delsegs=true,numsegs=5,index=/var/www/live/mystream.m3u8,index-url=http://"Here your webserverIP"/live/mystream-########.ts},mux=ts{use-key-frames},dst=/var/www/live/mystream-########.ts},dst=std{access=http,mux=ts,dst=:8082/video.mp4}}' &

Командная строка генерирует два выходных потока, один HLS для потоковой передачи через веб-страницу и поток MP4, к которому может непосредственно обращаться проигрыватель VLC в той же сети.

Просто установите правильные каталоги и введите фактические IP-адреса веб-сервера.

Для веб-сервера я использовал стандартную настройку lighttpd и создал файл index.html со следующим определением потока HTML 5:

<!DOCTYPE html>
<html>
<head>
    <title>Live Cam</title>
</head>

<body>
    <div id="player">
        <video autoplay="true" controls="controls" width="640" height="480">
            <source src="http://"Here your webserverIP"/live/mystream.m3u8" type="application/x-mpegURL" />
            Your browser does not support HTML5 streaming!
        </video>
    </div>
</body>
</html

Подключите веб-камеру, создайте файл index.html, перезапустите веб-сервер и затем выполните командную строку (как обычный пользователь). Все это работает, вы можете получить доступ к источнику потоковой передачи на всех I-устройствах.

Я пытался сделать то же самое с ffmpeg (сегмент и hls) с и без ffserver и даже с avconv и avserver, но пока безуспешно.

3

Я наткнулся на потоковый сервер с именем crtmpserver (или rtmpd), который кажется маленьким, но делает то, что я хочу, с небольшими изменениями в коде.

2

Вы можете прочитать это руководство, которое очень полезно для обучения работе с FFmpeg. По моему мнению, вы должны быть в состоянии создать хорошее решение, используя это руководство, потому что там есть все, что вам нужно, в FFmpeg. Кроме того, разделение вашего проекта на маленькие части - это отличный шаг. Просто попробуйте сначала получить поток с вашего устройства, а затем попытаться просмотреть его с помощью VLC (который также использует FFmpeg). Затем вы можете работать на сервере для трансляции вашего потока. Удачи!

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .