基於nginx-rtmp-module實現的直播項目小結

因爲項目須要接入視頻監控,因此先行了解了一些這方面的知識。雖然經過谷歌老師找到了許多教程,但在本身實踐的過程當中仍是不免有一些坎坷。這裏作一下簡單的記錄。因爲視頻監控平臺可能沒法直接提供rtmp或hls協議的視頻流,因此後期可能還會涉及到使用ffmpeg拉流、轉換視頻流再推流的工做。javascript

nginx視頻模塊介紹

項目地址:nginx-rtmp-module,認真看下readme.md就能大體瞭解使用方式;詳細的安裝步驟能夠參考國外這位老哥的文章:How to Install Nginx with RTMP Module on CentOS 7 css

測試工具介紹

  1. OBS:直播軟件,目前只用到了推視頻流到服務用來驗證效果;
  2. VLC:播放視頻用的,此次用到了rtmp、hls協議的播放,官網地址:www.videolan.org

播放協議介紹

copy from open.hikvision.com/docs/37e388…html

協議名稱 詳細介紹
RTSP 實時串流協議(Real Time Streaming Protocol,RTSP)是一種網絡應用協議,專爲娛樂和通訊系統的使用,以控制流媒體 服務器。該協議用於創建和控制終端之間的媒體會話。媒體服務器的客戶端發佈VCR命令,例如播放,錄製和暫停,以便於實時控制從服務器到客戶端(視頻點播)或從客戶端到服務器(語音錄音)的媒體流。
RTMP 實時消息協議(英語:Real-Time Messaging Protocol,縮寫RTMP)也稱實時消息傳輸協議,是最初由Macromedia爲經過互聯網在Flash播放器與一個服務器之間傳輸流媒體音頻、視頻和數據而開發的一個專有協議。
HLS HTTP Live Streaming(縮寫是HLS)是一個由蘋果公司提出的基於HTTP的流媒體網絡傳輸協議。
RTP 實時傳輸協議(Real-time Transport Protocol或簡寫RTP)是一個網絡傳輸協議,它是由IETF的多媒體傳輸工做小組1996年在RFC 1889中公佈的。

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.htmljava

<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. 剛開始看網絡的教程,將hls的http端口配置成8080,結果服務器上安全組沒有開放8080端口,查了很久;
  2. 用html自帶的video標籤是無法播放視頻的,也是測試了很久才改用video.js來播放;
  3. demo.html在測試的時候是做爲本地文件打開存在跨域的問題致使一直沒有播放成功,上傳到服務器後得以解決。

站在前輩的肩膀上

  1. NGINX-RTMP直播服務器搭建-OBS錄製推流-VLC視頻流播放
  2. 直播原理與web直播實戰
相關文章
相關標籤/搜索