Резюме проекта прямых трансляций на базе nginx-rtmp-module

Nginx прямая трансляция

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

введение в видеомодуль nginx

адрес проекта:nginx-rtmp-module, Смотри внимательноreadme.mdВы можете получить общее представление о том, как его использовать, для подробных шагов по установке вы можете обратиться к статье этого зарубежного брата:How to Install Nginx with RTMP Module on CentOS 7

Введение в инструменты тестирования

  1. OBS: программное обеспечение для прямых трансляций, в настоящее время используется толькоОтправка видеопотока на сервисиспользуется для проверки эффекта;
  2. VLC: использовался для воспроизведения видео, на этот раз по rtmp, воспроизведение по протоколу hls, адрес официального сайта:www.videolan.org;

Введение в протокол воспроизведения

copy from open.hikvision.com/docs/37oh388…

Имя протокола Подробное введение
RTSP Протокол потоковой передачи в реальном времени (RTSP) — это протокол сетевых приложений, разработанный для использования в развлекательных и коммуникационных системах для управления серверами потокового мультимедиа. Этот протокол используется для установления и управления мультимедийными сеансами между терминалами. Клиент медиа-сервера выдает команды видеомагнитофона, такие как воспроизведение, запись и пауза, чтобы облегчить управление потоковой передачей мультимедиа в реальном времени с сервера на клиент (видео по запросу) или с клиента на сервер (запись голоса).
RTMP Протокол обмена сообщениями в реальном времени (англ. Real-Time Messaging Protocol, сокращенно RTMP), также известный как Протокол обмена сообщениями в реальном времени, — это протокол, первоначально разработанный Macromedia для потоковой передачи аудио, видео и данных между Flash-плеером и сервером поверх Интернет Соглашение о собственности.
HLS HTTP Live Streaming (сокращенно HLS) — это основанный на HTTP протокол сетевой передачи потокового мультимедиа, предложенный Apple.
RTP Транспортный протокол в реальном времени (сокращенно RTP) — это сетевой транспортный протокол, который был опубликован в RFC 1889 Рабочей группой по мультимедийному транспорту IETF в 1996 году.

конфигурация nginx

rtmp {
    server {
        listen 1935;
        chunk_size 4096;
        # rmtp 协议播放
        application myapp {
            live on;
        }
        # hls协议播放
        application show {
            live on;
            hls on;
            hls_path /data/hls/; # 视频文件存放位置
            hls_fragment 5s;
            hls_playlist_length 60;
            deny play all;
        }
    }
}
http {
    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        access_log  /var/log/nginx/host.access.log  main;
        
        # 查看stat
        location /stat {
            rtmp_stat all;
            rtmp_stat_stylesheet stat.xsl;
        }
        # stat.xsl 文件要从nginx-rtmp-module源码目录中cp到html目录下面
        location /stat.xsl {
            root html;
        }
        
        location /hls {
            types {
                application/vnd.apple.mpegurl m3u8;
                video/mp2t ts;
            }
            root /data;# 与上面hls配置的root要对应,不然视频文件就404了
            add_header Cache-Control no-cache;

        }
    }

браузер воспроизводит видео в формате hls

передняя часть основана наvideojsРеализовано воспроизведение видео, версии до 7.0 похоже не поддерживают воспроизведение по протоколу hls, поэтому до 7.0 есть еще один инструмент:videojs-contrib-hls

demo.html

<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
    <title>video</title>
    <link rel="stylesheet" href="https://vjs.zencdn.net/7.0.0/video-js.css">
    <script src="https://vjs.zencdn.net/7.0.0/video.min.js"></script>
</head>
<body>
<video id="test_video" controls preload="none" width="640" height="480"
      class="video-js  vjs-big-play-centered vjs-fluid "
      poster="http://video-js.zencoder.com/oceans-clip.png"
      data-setup="{}">
    <source src="http://119.3.193.218/hls/test.m3u8" type='application/vnd.apple.mpegurl' />
</video>
<script type="text/javascript">
    var myPlayer = videojs('test_video'); // video 标签中的ID
    myPlayer.ready(function(){
        myPlayer.play(); 
    });
</script>
</body>
</html>

Некоторые проблемы, возникшие во время

  1. Только начал смотреть туториал по сети и настроил http порт hls на 8080. В итоге группа безопасности на сервере не открывала порт 8080. Долго проверял, т.к.
  2. Невозможно воспроизвести видео с тегом видео, который поставляется с html, и он был протестирован в течение длительного времени, прежде чем переключиться на video.js для его воспроизведения;
  3. demo.htmlВо время теста он открывался как локальный файл и была кроссдоменная проблема, из-за которой не было успешного воспроизведения.После загрузки на сервер она была решена.

стоя на плечах пожилых людей

  1. Создание живого сервера NGINX-RTMP-запись и потоковая передача OBS-воспроизведение потокового видео VLC
  2. Принцип прямого эфира и реальный бой веб-прямого вещания