任务是客户端 A
可以通过服务器 S
从Web摄像头流式传输到其他客户端 B
, C
等 .
我使用 NGINX nginx-rtmp-module 配置了 HLS 流媒体服务器 . 它工作正常 . 现在我的服务器可以做流式传输在服务器上执行此命令,我创建了流 .
$ ffmpeg -f video4linux2 -video_size 640x480 -i /dev/video0 -vcodec libx264 -acodec aac -strict -2 -f flv rtmp://localhost:1935/live/stream
此命令捕获网络摄像头并创建可通过URL访问的流: rtmp://localhost:1935/live/stream
.
现在我可以在任何视频播放器中观看此流 .
但我需要从客户端 A
的浏览器捕获视频并将其传输到URL rtmp://localhost:1935/live/stream
以创建流 .
在JS脚本中,我从网络摄像头捕获流并将其显示在 <video>
标记中 .
HTM L代码:
<div class="box-body">
<div class="row">
<div class="col-xs-12">
<video controls muted></video>
</div>
</div>
</div>
JS 代码:
let recordingPlayer = $('video');
let videoStream = null;
let successCallback = function (stream) {
recordingPlayer[0].srcObject = stream;
recordingPlayer[0].play();
videoStream = stream;
// I think I need to somehow transfer this stream to the address:
// rtmp://localhost:1935/live/stream
};
let errorCallback = function (error) {
console.log(error);
};
let mediaConstraints = { video: true, audio: true };
// Doing webcam capture
navigator.mediaDevices
.getUserMedia(mediaConstraints)
.then(successCallback)
.catch(errorCallback);
但我完全无法理解如何将流从客户端 A
网络摄像头传输到我的 HLS 流媒体服务器 .
据我了解, ffmpeg
命令从服务器网络摄像头捕获视频,然后将其转换为合适的格式(带视频编解码器libx264的mp4),然后将数据发送到此URL rtmp://localhost:1935/live/stream
.
我想我需要使用网络套接字将网络摄像头的流发送到服务器,然后在服务器上使用该命令 ffmpeg
将数据发送到该地址 .
你能帮助我,如何将捕获的流从网络摄像头发送到 HLS 流媒体服务器?