首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用React和node向RTMP服务器发送视频流

如何使用React和node向RTMP服务器发送视频流
EN

Stack Overflow用户
提问于 2021-05-20 16:43:07
回答 2查看 574关注 0票数 0

我有一个RTMP服务器(node-media- Server ),在那里我可以从OBS发送流,并在浏览器中观看。为了使发送过程更简单,我想直接从浏览器发送流。

第一个想法是用navigator.getUserMedia()获取流数据。

代码语言:javascript
复制
const getVideo = () => {
  navigator.mediaDevices
    .getUserMedia({ video: { width: 300 } })
    .then(stream => {
      let video = videoRef.current;
      video.srcObject = stream;
      video.play();
    })
    .catch(err => {
      console.error("error:", err);
    });
};

这显示了视频元素中的媒体。有没有办法把这个流传送到rtmp?也许我必须创建一个新的MediaRecorder对象,但是我如何发送它呢?有没有其他方式作为websocket发送它?

欢迎所有获得起点的想法。

更新1

我已经创建了一个MediaRecorder对象,并使用Websocket发送它:

代码语言:javascript
复制
.then(stream => {
    let mediaRecorder = new MediaRecorder(stream);
    mediaRecorder.start(250);
    mediaRecorder.ondataavailable = function(e) {
        ws.send(e.data);
    }
    //...
}

在node.js端

代码语言:javascript
复制
ws._socket.on('data', (data) => console.log('incoming_data'));

控制台:

代码语言:javascript
复制
Eߣ�B��B��B�BB��matroskaB��B��S�g�������I�f�*ױ�B@M��ChromeWA�ChromeT�k���ׁsŇ��v0��烁��V_MPEG4/ISO/AVC��������C�u��������

不确定这是否正确。如果正确,我如何将此数据提供给node-media-server?

EN

回答 2

Stack Overflow用户

发布于 2021-07-09 14:06:09

将传入的blob发送到ffmpeg stdin

代码语言:javascript
复制
io.on("connection", (socket) => {
  const ffmpeg = child_process.spawn('ffmpeg', [
    '-f', 'lavfi', '-i', 'anullsrc',
    '-i', '-',
    '-vcodec', 'copy',
    '-acodec', 'aac',
    '-f', 'flv',
    `rtmp://${url}/${key}`
  ])

  ffmpeg.on('close', (code, signal) => {
    console.log('FFmpeg child process closed, code ' + code + ', signal ' + signal);
  });
  
  ffmpeg.stdin.on('error', (e) => {
    console.log('FFmpeg STDIN Error', e);
  });
  
  ffmpeg.stderr.on('data', (data) => {
    console.log('FFmpeg STDERR:', data.toString());
  });
  
  ws._socket.on('data', (data) => {
    // console.log("got tracks");
    ffmpeg.stdin.write(data)
  });

});

我引用了这个docs

票数 0
EN

Stack Overflow用户

发布于 2021-09-22 14:58:02

我使用'node-media-server‘包来处理RTMP。

这对我很管用。

代码语言:javascript
复制
  const ffmpeg = child_process.spawn("ffmpeg", [
        "-f",
        "lavfi",
        "-i",
        "anullsrc",
        "-i",
        "-",
        "-c:v",
        "libx264",
        "-preset",
        "veryfast",
        "-tune",
        "zerolatency",
        "-c:a",
        "aac",
        "-f",
        "flv",
        `rtmp://127.0.0.1:1935/live/key`
      ]) 

   io.on('data', (data) => {
     ffmpeg.stdin.write(data)
   })
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67616927

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档