Прямая трансляция NGINX / RTMP / HLS на Raspberry pi (Debian 8.4)



Debian 8.4 / Raspbian 8.0

Nginx 1.9.15

ffmpeg 2.6.8 (на стороне сервера) / avconv 11.6-6:11.6-1~deb8u1+rpi1 (camera collect). Avconv-это вилка FFMPEG, она отлично работает на raspbian.


схема

cam-1: малина pi / модель B / raspbian 8.0 (Jessie) / avconv

mercure: debian server 8.4 (Jessie) / nginx / ffmpeg

cam-1 [rapivid / avconv (ffmpeg)] ->mercure [nginx rtmp / hls]


Я прочитал много сообщений в интернете с 2 недель о настройке сервера потокового видео в реальном времени, который получал видеопотоки с камеры raspberry pi. не беспокойтесь о потоковом источнике малины, проблема не сосредоточена.
Цель состоит в том, чтобы иметь возможность читать RTMP и HLS прямые трансляции на удаленном сервере NGINX

факты :

это работает, я умею читать прямая трансляция с сервера RTMP / NGINX через

ffplay rtmp://mercure/live/cam-1 (defaults to 1935 port)

Примечание :
он не использует VLC и приложение QT5, встраивающее виджеты QMediaPlayer / QMediaContent.
Я узнал, что VLC вводит проблемы с librtmp.таким образом, на debian и, кажется, то же самое на window 7 (тест также терпит неудачу). Источник : Блог дебиан. Вопрос QT5 это возможно побочный эффект как QT5, возможно, использует в VLC библиотеки ? Я все еще расследую. Компоненты QT5 могут читать любой видеофайл диска, но заморозка первого изображения при потоковой передаче с rtmp

установлен модуль nginx hls.

камера (raspberry pi)

для подключения видеопотока с камеры и его публикации на сервере nginx rtmp с помощью пакетов raspivid и avconv (вилка FFMPEG) используется команда:

вытащить из рашпиля кулачка (cam-1):

/opt/vc/bin/raspivid -hf -vf -fl -pf main -a 8 -mm matrix -w 640 -h 480 -g 250 -t 0 -b 2048000 -o -

нажмите на сервер RTMP (mercure)

avconv -re -i - -nostats -c copy -copyts -an -r 25 -f flv rtmp://mercure:1935/live/cam-1

полная команда встроенный в службу debian тогда

/opt/vc/bin/raspivid -hf -vf -fl -pf main -a 8 -mm matrix -w 640 -h 480 -g 250 -t 0 -b 2048000 -o - | avconv -re -i - -nostats -c copy -copyts -an -r 25 -f flv rtmp://mercure:1935/live/cam-1

RTMP / HTTP server side

все сообщения, похоже, указывают на этот тип конфигурации (/etc/nginx.конф отрывок ). Это работает при чтении чистых RTMP-потоков через ffplay, как упоминалось выше

rtmp {

        server {

            listen 1935;
            chunk_size 4000;

            application live {

                    live on;

            }

            application hls {
                    live on;              
                    hls on;
                    hls_path /tmp/hls;

            }
         }
}

http {

    server {

            server_name     mercure;

            location / {
                root   /var/www;
                index  index.html;
            }

            location /hls{

                    types {
                            video/MP2T ts;
                            application/vnd.apple.mpegurl m3u8;
                    }

                    root /tmp;

                    add_header Cache-Control no-cache;
                    add_header Access-Control-Allow-Origin *;

            }

    }
}

Я не совсем понимаю, как nginx работает с hls ... ли входящий поток от avconv (ffmpeg и SDL) - это динамично толкнул на заявка /ЗОЖ протоколу RTMP ? когда поток камеры получен, папка/tmp / hls создается вместе с cam-1-0.файл ТС .. но больше ничего ... нет индекса m3u8 форматов ...

попытка доступа к HLS ресурсу с помощью http://mercure/hls/cam-1 (.m3u8,.m3u ...) и ответом является ошибка HTTP 404: стандартное поведение http.

Я пытался кормить / hls rtmp приложение, изменив trought раздел конфигурации rtmp жить

application live {

  live on;
  exec ffmpeg -i rtmp://mercure/live/cam-1 -c copy -f flv rtmp://mercure/hls/cam-1;

}

Я абсолютно не уверен в способности nginx управлять потоками HLS а документации на него.

мой вопрос: действительно ли кто - нибудь преуспевает в публикации входящего источника flv в поток HLS с использованием транспорта FFMPEG и сервера NGINX / http-rtmp (/hls/dash)?

25
задан Emmanuel
07.11.2022 11:28 Количество просмотров материала 2645
Распечатать страницу

1 ответ

настройки: raspivid -> видео -> программное обеспечение -> ЗОЖ[ТС/m3u8 форматов] -> VideoJS

установка nginx RTMP HLS очень прямолинейна, поэтому я не буду проходить через это. Я использую hls_fragment размером 250мс и hls_playlist размером 3s. Не стесняйтесь использовать мой сервер HLS nginx RTMP. Просто скопируйте и вставьте то, что находится в разделе rtmp, но измените 'stream_name' на что-то уникальное. Точно так же измените это в VideoJS, чтобы вы могли воспроизводить его на своей веб-странице. Я не гарантирую, что приложение 2a будет существовать навсегда, но я планирую, что это будет моим тестовым приложением на некоторое время.

  1. Только Видео, A raspivid -Н-Т 0 -ч 480 -з 854 -ФПС 24-б 1536000 -о - | ffmpeg с -я - -с:в копии -Ф вашы 'по протоколу RTMP://потоков.сенсор.решения / 2a / stream_name' Плюсы: простое, твердое качество, отсутствие буферизации. Минусы: ~задержка 10С
  2. Только Видео, B raspivid -Н-Т 0 -ч 480 -з 854 -ФПС 15 -б 1080000 -о - | ffmpeg с -я - -с:в копии -Ф вашы 'по протоколу RTMP://потоков.сенсор.решения / 2a / stream_name' Плюсы: низкая задержка, меньше 5. Минусы: Буферизация, Качество
  3. видео и аудио [USB через Sabrent и дешевый 3,5 мм микрофон] raspivid -Н-Т 0 -ч 480 -з 854 -ФПС 25 -2000000 б-о - | ffmpeg на thread_queue_size 512 -я - -itsoffset 00:00:05.22 -Ф алса -переменного тока 1 -я утилита HW:0,0 -карте 0:0 -на карте 1:0 -с:ААС -С:в копии -Ф вашы 'по протоколу RTMP://потоков.сенсор.решения / 2a / stream_name' Плюсы: качество, отсутствие буферизации, синхронизированный аудио / видео. Минусы: высокий битрейт [не подходит для нескольких устройств с одинаковой пропускной способностью], задержка ~12s - 15s

VideoJS:

    <!--Note, you should including the following in the HEAD of your HTML file: 
    <link href="http://videojs.github.io/videojs-contrib-hls/node_modules/bootstrap/dist/css/bootstrap.min.css" rel="stylesheet">
    -->
    <div class="container" id="videojs_container">
        <section class="starter-template">
            <video id=video-js-player width=854 height=480 class="video-js vjs-default-skin" controls autoplay="true" data-setup="{}" preload="auto">
                <source src = "http://streaming.sensored.solutions/2a/stream_name/index.m3u8" type = "application/x-mpegURL">
            </video>
        </section>
    </div>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
    <script src="http://videojs.github.io/videojs-contrib-hls/node_modules/bootstrap/dist/js/bootstrap.min.js"></script>
    <script src="http://videojs.github.io/videojs-contrib-hls/js/ie10-viewport-bug-workaround.js"></script>
    <link href="//vjs.zencdn.net/5.4/video-js.css" rel="stylesheet">
    <script src="//vjs.zencdn.net/5.4/video.js"></script>
    <script src="http://videojs.github.io/videojs-contrib-hls/node_modules/videojs-contrib-hls/dist/videojs.hls.min.js"></script>
0
отвечен The Beach. Today. 2022-11-08 19:16

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх