node.js建立流媒體伺服器
阿新 • • 發佈:2018-11-19
系統: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音訊輸入裝置查詢