一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

node.js|vue.js|jquery|angularjs|React|json|js教程|

服務器之家 - 編程語言 - JavaScript - node.js - 使用node-media-server搭建一個簡易的流媒體服務器

使用node-media-server搭建一個簡易的流媒體服務器

2022-01-05 16:55小朱小先生 node.js

這篇文章主要介紹了使用node-media-server搭建一個簡易的流媒體服務器,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

記錄一下使用node-media-server的一些過程。本文章環境為windows。本文章適合初學者。

使用到的東西:nodeJsffmpegnode-media-server

這里說一點(如果有錯歡迎指出):

node-media-server是作為流媒體服務器,你可以把他理解為中轉站,用于轉換流格式或者對視頻流做一些操作以及向外推送流地址。

ffmpeg是作為推流工具,將你需要轉換的視頻或者視頻流推流到流媒體服務器中。

拉流的意思是從流媒體服務器上拉去視頻流,觀看者通過拉取流媒體服務器發布的流地址進行觀看。你用視頻播放器播放就是在拉流。

安裝

node-media-server是基于node.Js開發的,所以需要先使用npm安裝。

?
1
npm install node-media-server

編寫并運行node-media-server

新建app.js。并編寫下述代碼,然后運行app.js

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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的管理端界面。截圖如下:

使用node-media-server搭建一個簡易的流媒體服務器

使用FFmpeg命令推送地址。

推送視頻文件

在執行下面的代碼的時候,需要將node-media-server啟動起來。

?
1
ffmpeg -re -i ./video.mp4 -c copy -f flv rtmp://localhost:1935/live/STREAM_NAME

上述的命令經過node-media-server后會產生兩種流地址。一種rtmp。一種flv。前者可以在電腦上播放,后者可以在手機和電腦上播放。rtmp地址為FFmpeg里的命令地址

flv地址為: http://localhost:8000/live/STREAM_NAME.flv

推送rtsp流

推送rtsp(攝像頭視頻流)只要將上述的./video.mp4該一下就行。博主在測試過程中發現,推送rtsp流要么會出現綠屏要么會出現丟包現象,特別是和hls結合在一起,丟包率更大,所以不建議使用命令去推送rtsp流。

轉hls流格式

轉hls流需要注意一點,需要指明一下mediaroot參數,雖然node-media-server內部有設置默認值,但是還是推薦在設置一次。然后使用下述配置即可。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
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: { // 這里參數是trans參數,不是relay參數,relay參數中配置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進行推流,稍等一會,你就會發現在mediaroot指向的目錄下生成一個live/STREAM_NAME的文件夾,里面存放著m3u8文件。由于需要先生成m3u8文件,所以如果是推流攝像頭的話,會存在比較大的延遲。

m3u8地址為:http://localhost:8000/live/STREAM_NAME/index.m3u8

如果發現m3u8播放有問題,把ac和vc兩個參數去掉試試。樓主在實際使用的時候,這兩個參數并沒有使用。

使用代碼對rtsp流轉流

對于有的使用者有可能需要將rtsp攝像頭視頻流進行推流,以便進行跨端預覽,博主這里建議使用這種方法。這種方法無需使用cmd執行FFmpeg命令,而且延遲經博主測試為3s(內網,由于沒有外網地址,所以外網不是很清楚)。延遲較小。

代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
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();

這種方法可以產生兩種視頻流,一種rtmp一種flv。

總結

因為博主搭建流媒體服務器主要是為了項目中對攝像頭進行轉流,但是之前JAVA同事有處理過發現會消耗大量的硬件資源,不過博主使用node-media-server倒是沒有發現消耗多大的資源,最終還是需要各位具體測試。而且對于攝像頭轉流,為了避免不必要的性能消耗,樓主打算僅當觀察者發起預覽的時候,才讓服務端啟動流媒體轉流功能(使用代碼對rtsp流轉流),當觀察者關閉預覽,就立即把流媒體功能關閉。這樣能避免性能的不必要消耗。畢竟可以直接通過代碼直接操作,這樣就比較方便,也能降低服務器的一定壓力。

到此這篇關于使用node-media-server搭建一個簡易的流媒體服務器的文章就介紹到這了,更多相關node-media-server搭建流媒體服務器內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://blog.csdn.net/QiZi_Zpl/article/details/107259935

延伸 · 閱讀

精彩推薦
  • node.jsnodejs中使用worker_threads來創建新的線程的方法

    nodejs中使用worker_threads來創建新的線程的方法

    這篇文章主要介紹了nodejs中使用worker_threads來創建新的線程的方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友...

    flydean程序那些事8982022-01-06
  • node.jsk8s node節點重新加入master集群的實現

    k8s node節點重新加入master集群的實現

    這篇文章主要介紹了k8s node節點重新加入master集群的實現,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋...

    Scarborought13922022-01-22
  • node.js在瀏覽器中,把 Vite 跑起來了!

    在瀏覽器中,把 Vite 跑起來了!

    大家好,我是 ssh,前幾天在推上沖浪的時候,看到 Francois Valdy 宣布他制作了 browser-vite[1],成功把 Vite 成功在瀏覽器中運行起來了。這引起了我的興趣,如...

    前端從進階到入院9282022-01-11
  • node.js詳解node.js創建一個web服務器(Server)的詳細步驟

    詳解node.js創建一個web服務器(Server)的詳細步驟

    這篇文章主要介紹了詳解node.js創建一個web服務器(Server)的詳細步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,...

    王佳斌8952021-12-31
  • node.jslinux服務器快速卸載安裝node環境(簡單上手)

    linux服務器快速卸載安裝node環境(簡單上手)

    這篇文章主要介紹了linux服務器快速卸載安裝node環境(簡單上手),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需...

    mose-x8462022-01-22
  • node.jsrequire加載器實現原理的深入理解

    require加載器實現原理的深入理解

    這篇文章主要給大家介紹了關于require加載器實現原理的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需...

    隱冬8462022-03-03
  • node.jsNode.js ObjectWrap 的弱引用問題

    Node.js ObjectWrap 的弱引用問題

    最近在寫 Node.js Addon 的過程中,遇到了一個問題,然后發現是 ObjectWrap 弱引用導致的,本文介紹一下具體的問題和排查過程,以及 ObjectWrap 的使用問題。...

    編程雜技9852022-01-04
  • node.jsNode.js 中如何收集和解析命令行參數

    Node.js 中如何收集和解析命令行參數

    這篇文章主要介紹了Node.js 中如何收集和解析命令行參數,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋...

    descire8802021-12-28
主站蜘蛛池模板: 久久精品国产亚洲AV热无遮挡 | xxx95日本老师xxx学生 | 臀精插宫NP文| 欧美一级在线 | 女女性恋爱视频入口 | 欧美一区二区免费 | 亚洲高清国产品国语在线观看 | 欧美另类性xxoo | 国产精品主播在线 | 被强迫调教的高辣小说 | 国产90后美女露脸在线观看 | cos美女被黄网站 | xxxxxx日本处大片免费看 | 久久免费看少妇级毛片蜜臀 | 免费网址视频在线看 | 国产美女久久精品香蕉69 | 情人梁家辉在线 | 美女撒尿无遮挡免费中国 | 激情综合 | 国产欧美一区二区三区久久 | 青草草视频在线观看 | 极品美女aⅴ高清在线观看 极品ts赵恩静和直男激战啪啪 | 欧美成狂野欧美在线观看 | 欧美亚洲影院 | 天天中文 | 欧美成人第一页 | 99国产自偷色久 | 91精品免费观看老司机 | 精品小视频在线 | 亚洲福利一区 | 九九精品免视看国产成人 | 天堂bt在线| 久久亚洲精品AV无码四区 | 欧美图片小说 | 美女扒开腿让男人桶爽动态图片 | 91porny.首页| 精品久久久久久亚洲精品 | 久久观看视频 | 欧美坐爱 | 国产精品免费综合一区视频 | 无人区1在线观看 |