您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關(guān)使用node-media-server怎么搭建一個流媒體服務(wù)器,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關(guān)知識有一定的了解。
安裝
node-media-server是基于node.Js開發(fā)的,所以需要先使用npm安裝。
npm install node-media-server
新建app.js。并編寫下述代碼,然后運行app.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();
可以訪問localhost:8000/admin地址,訪問node-media-server的管理端界面。截圖如下:
推送視頻文件
在執(zhí)行下面的代碼的時候,需要將node-media-server啟動起來。
ffmpeg -re -i ./video.mp4 -c copy -f flv rtmp://localhost:1935/live/STREAM_NAME
上述的命令經(jīng)過node-media-server后會產(chǎn)生兩種流地址。一種rtmp。一種flv。前者可以在電腦上播放,后者可以在手機和電腦上播放。rtmp地址為FFmpeg里的命令地址
flv地址為: http://localhost:8000/live/STREAM_NAME.flv
推送rtsp(攝像頭視頻流)只要將上述的./video.mp4該一下就行。博主在測試過程中發(fā)現(xiàn),推送rtsp流要么會出現(xiàn)綠屏要么會出現(xiàn)丟包現(xiàn)象,特別是和hls結(jié)合在一起,丟包率更大,所以不建議使用命令去推送rtsp流。
轉(zhuǎn)hls流需要注意一點,需要指明一下mediaroot參數(shù),雖然node-media-server內(nèi)部有設(shè)置默認值,但是還是推薦在設(shè)置一次。然后使用下述配置即可。
const NodeMediaServer= require('node-media-server'); const ff = require('ffmpeg'); const config = { rtmp: { port: 1935, chunk_size: 60000, gop_cache: true, ping: 60, ping_timeout: 30 }, http: { port: 8979, mediaroot: './media/', // 建議寫 allow_origin: '*', }, trans: { // 這里參數(shù)是trans參數(shù),不是relay參數(shù),relay參數(shù)中配置hls無效 ffmpeg: './bin/ffmpeg.exe',//指明FFmpeg位置 tasks: [ { app: 'live', ac: 'acc', vc: 'libx264', hls: true, hlsFlags: '[hls_time=2:hls_list_size=3:hls_flags=delete_segments]', dash: true, dashFlags: '[f=dash:window_size=3:extra_window_size=5]' } ] } }; var nms = new NodeMediaServer(config) nms.run();
啟動上述代碼后,使用FFmpeg進行推流,稍等一會,你就會發(fā)現(xiàn)在mediaroot指向的目錄下生成一個live/STREAM_NAME的文件夾,里面存放著m3u8文件。由于需要先生成m3u8文件,所以如果是推流攝像頭的話,會存在比較大的延遲。
m3u8地址為:http://localhost:8000/live/STREAM_NAME/index.m3u8
如果發(fā)現(xiàn)m3u8播放有問題,把ac和vc兩個參數(shù)去掉試試。樓主在實際使用的時候,這兩個參數(shù)并沒有使用。
對于有的使用者有可能需要將rtsp攝像頭視頻流進行推流,以便進行跨端預(yù)覽,博主這里建議使用這種方法。這種方法無需使用cmd執(zhí)行FFmpeg命令,而且延遲經(jīng)博主測試為3s(內(nèi)網(wǎng),由于沒有外網(wǎng)地址,所以外網(wǎng)不是很清楚)。延遲較小。
代碼如下:
const NodeMediaServer= require('node-media-server'); const config = { rtmp: { port: 1935, chunk_size: 60000, gop_cache: true, ping: 60, ping_timeout: 30 }, http: { port: 8979, mediaroot: './media/', allow_origin: '*', }, relay: { ffmpeg: './bin/ffmpeg.exe', tasks: [ { app: 'live', mode: 'static', edge: 'rtsp://admin:****@192.168.4.167:554/Streaming/Channels/101',//rtsp name: 'technology', rtsp_transport : 'tcp', //['udp', 'tcp', 'udp_multicast', 'http'] } ] }, }; var nms = new NodeMediaServer(config) nms.run();
關(guān)于使用node-media-server怎么搭建一個流媒體服務(wù)器就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。