Node+OBS直播服務器搭建總結


導語:最近研究了一下網頁直播流的原理以及實現,現在就目前的實現方法做一個總結。

目錄

  • 直播流媒體協議
  • 拉流與推流
  • Node服務搭建
  • 前端播放頁面
  • OBS推流配置

直播流媒體協議

先來了解一下基本的直播流媒體協議。

http-flv,rtpm

協議/特點 開發者 原理 優點 缺點
http-flv Abode 通過服務器把flv下載到本地緩存,然后通過NetConnection本地連接播放 節省服務器消耗 保密性差
rtmp Abode 通過NetConnection連接到服務器,實時播放服務器的flv 保密性好 消耗服務器資源
rtsp 哥倫比亞大學、網景和RealNetworks 控制具有實時特性的數據的發送,依賴傳輸協議 實時效果非常好 實現復雜
hls 蘋果公司 包括一個m3u(8)的索引文件,TS媒體分片文件和key加密串文件,不將TS切片文件存到磁盤,而是存在內存當中 極大減少了磁盤的I/O次數,延長了服務器磁盤的使用壽命,極大提高了服務器運行的穩定性 會生成大量的文件,存儲或處理這些文件會造成大量資源浪費

拉流與推流

推流,指的是把采集階段封包好的內容傳輸到服務器的過程。

拉流, 指服務器已有直播內容,用指定地址進行拉取的過程。

在這里插入圖片描述

Node服務搭建

  • 安裝依賴包

這次使用node-media-server包,來搭建,獲取更多請訪問

mkdir live
cd live
npm init -y
npm i node-media-server

引入包,編寫配置文件

// server.js
const nodeMediaServer = require('node-media-server');
const config = {
    rtmp: {
        port: 3001,
        chunk_size: 6000,
        gop_cache: true,
        ping: 30,
        ping_timeout: 60
    },
    http: {
        port: 3002,
        allow_origin: "*"
    }
}

const nms = new nodeMediaServer(config);

nms.run();

啟動以后會輸入一下內容

D:\live>node server.js
2021/8/22 14:52:19 9588 [INFO] Node Media Server v2.3.8
2021/8/22 14:52:19 9588 [INFO] Node Media Rtmp Server started on port: 3001
2021/8/22 14:52:19 9588 [INFO] Node Media Http Server started on port: 3002
2021/8/22 14:52:19 9588 [INFO] Node Media WebSocket Server started on port: 3002

如果打印出以上內容,說明一個rtmp的直播服務器就已經搭建成功了。

  • 拉推流地址

AppName就是App名稱;StreamName就是流名稱。

推流地址:

url: rtmp://localhost/live
key: STREAM_NAME

拉流地址:

rtmp: rtmp://localhost:port/live/STREAM_NAME
http-flv: http://localhost:3002/live/STREAM_NAME.flv
HLS: http://localhost:3002/live/STREAM_NAME/index.m3u8
DASH: http://localhost:3002/live/STREAM_NAME/index.mpd
websocket-flv: ws://localhost:3002/live/STREAM_NAME.flv

這里主要使用的推流地址是:rtmp://localhost/xqlive/demo,拉流地址是http://localhost:3002/xqlive/demo.flv

前端播放頁面

這里主要是使用flv.js進行播放。

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>雲直播</title>
    <style>
        #live {
            margin: 0 auto;
            display: block;
            min-width: 300px;
            max-width: 600px;
            width: 100%;
        }
    </style>
</head>

<body>
    <video id="live" playsinline controls src="" poster="./img/poster.jpg"></video>
    <script src="js/flv.min.js"></script>
    <script>
        if (flvjs.isSupported()) {
            let ve = document.getElementById('live');
            let flvPlayer = flvjs.createPlayer({
                type: 'flv',
                url: 'http://localhost:3002/xqlive/demo.flv'
            });
            flvPlayer.attachMediaElement(ve);
            flvPlayer.load();
            flvPlayer.play();
        }
    </script>
</body>

</html>

看一下效果

在這里插入圖片描述

OBS推流配置

這里使用OBS進行推流直播。

OBS下載地址

下載好后安裝然后打開主頁面,找到文件=》設置=》推流

然后填寫好地址與密鑰就好了。

在這里插入圖片描述

接着選擇媒體源開始推流。

  • 推流界面

下面是我選擇的一段小視頻進行推流直播。

在這里插入圖片描述

  • 播放界面

在這里插入圖片描述

除了媒體源,你還可以選擇直播顯示器桌面,直播文字,直播圖片,以及開啟攝像頭直播你自己,都可以。

如果你要部署到線上的話,要保障你的服務器帶寬至少在10MB左右,不然就會很卡的。

好了,自建直播就介紹到這里,如果你進行商業化服務,那就要購買雲計算服務商的雲直播服務了,那個是非常流程的清晰的,但是是根據直播帶寬或者流量計費的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM