任务是客户A
可以通过服务器B
从网络摄像头流式传输到其他客户C
,S
等。
我使用 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
的浏览器中捕获视频,并将其转移到网址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),然后将数据发送到此网址rtmp://localhost:1935/live/stream
。
我想我需要使用网络套接字将网络摄像头的流发送到服务器,然后在服务器上使用该命令ffmpeg
将数据发送到该地址。
您能否帮助我,如何将捕获的流从网络摄像头发送到 HLS 流媒体服务器?