任务是客户端 A 可以通过服务器 S 从Web摄像头流式传输到其他客户端 BC 等 .

我使用 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 流媒体服务器?