1. 程式人生 > >node.js建立流媒體伺服器

node.js建立流媒體伺服器

系統:linux

一、npm安裝

Ubuntu:

# 安裝 npm
sudo apt-get install npm 
# npm 升級
sudo npm install -g npm
# 切換到淘寶映象源
npm install -g cnpm --registry=http://registry.npm.taobao.org

二、安裝express

# 先安裝generator
sudo npm install -g express-generator
# 安裝express
sudo npm instal -g express

三、通過express建立工程

# 新建工程
express --view=ejs nodeServer
# 進入到工程目錄
cd nodeServer
<!-- 開啟 package.json 並在dependencies 新增相關依賴 --> 
{
  "name": "nodeServer",
  "version": "0.0.0",
  "private": true,
  "scripts": {
    "start": "node ./bin/www"
  },
  "dependencies": {
    "cookie-parser": "~1.4.3",
    "debug": "~2.6.9",
    "ejs": "~2.5.7",
    "express": "~4.16.0",
    "http-errors": "~1.6.2",
    "morgan": "~1.9.0",
    "node-media-server": "~1.4.3"
  }
}
# 利用npm安裝所有依賴
npm install 
# 至此 node.js 環境配置完成

在NodeServer資料夾中新建js檔案,如:nodeServerTest.js 
並設定內容如下

const { NodeMediaServer } = require('node-media-server');

const config = {
  rtmp: {
    port: 1935,
    chunk_size: 60000,
    gop_cache: true,
    ping: 60,
    ping_timeout: 30
  },
  http: {
    port: 8000,
    allow_origin: '*'
  }
};

var nms = new NodeMediaServer(config);
nms.run();

在該資料夾下終端執行如下指令:

# 以非嚴格模式執行
node --harmony nodeServerTest.js

得到結果如下: 
 
至此,node.js已建立伺服器,相關埠引數如果後來者不明白,自己百度科普

四、安裝ffmpeg並推送流資料

Ubuntu下安裝ffmpeg比較方便:

sudo apt-get install ffmpeg

查詢攝像頭裝置:

sudo ls /dev/video*
# 若只有一個攝像頭,得到的一般是 /dev/video0

ffmpeg推送流

ffmpeg -f video4linux2 -i /dev/video0 -vcodec libx264 -acodec libvo_aacenc -b 1080k -r 33 -preset:v ultrafast -tune:v zerolatency -f flv rtmp://localhost:1935/live/STREAM_NAME
# 附註:在Windows系統下,-f後面的引數多為dshow,-i後面的引數video="攝像頭名":audio="麥克風名",在Windows系統中,多為虛擬裝置

執行效果如下: 
 
參考連結 
連結備用:(https://oainin.wordpress.com/2018/06/09/nodejs%E5%88%9B%E5%BB%BA%E6%B5%81%E5%AA%92%E4%BD%93%E6%9C%8D%E5%8A%A1%E5%99%A8/) 
至此在其他主機上能夠訪問實時流

五、在網頁上訪問流資料

新建html檔案,如:videoPlay.html

<!-- 將192.168.128.112換成伺服器實際ip -->
<script src="https://cdn.bootcss.com/flv.js/1.4.0/flv.min.js"></script>
<video id="videoElement" width="720" height="400" controls></video>
<script>
    if (flvjs.isSupported()) {
        var videoElement = document.getElementById('videoElement');
        var flvPlayer = flvjs.createPlayer({
            type: 'flv',
            url: 'http://192.168.128.112:8000/live/STREAM_NAME.flv'
        });
        flvPlayer.attachMediaElement(videoElement);
        flvPlayer.load();
        flvPlayer.play();
    }
</script>

用瀏覽器開啟該html檔案即可實時檢視流資料。 

1、視訊延遲比較久,原因暫未知,貌似和緩衝區大小無關 
2、開啟的瀏覽器用高階點的,需要能夠支援html5,否則自己該頁面程式碼 
3、視訊未載入音訊,若需載入詳情百度ffserver.conf相關配置以及linux音訊輸入裝置查詢