Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/audio/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从ffmpeg到Facebook Live的流媒体传输被终止_Facebook_Audio_Ffmpeg_Streaming_Live Streaming - Fatal编程技术网

从ffmpeg到Facebook Live的流媒体传输被终止

从ffmpeg到Facebook Live的流媒体传输被终止,facebook,audio,ffmpeg,streaming,live-streaming,Facebook,Audio,Ffmpeg,Streaming,Live Streaming,我正在尝试在浏览器上捕获画布(canvas.captureStream),添加音频(使用getUserMedia捕获并使用canvasStream.addTracks添加到流),然后将其发送到服务器。服务器使用ffmpeg将流(使用H264编码后)发送到facebook live。但是,流不稳定,在几分钟内断开连接。 如果直接(不带canvas.captureStream)发送视频和音频曲目(使用getMediaUser),则效果良好。我怀疑这与音轨不正确有关,因此facebook拒绝了它(ff

我正在尝试在浏览器上捕获画布(canvas.captureStream),添加音频(使用getUserMedia捕获并使用canvasStream.addTracks添加到流),然后将其发送到服务器。服务器使用ffmpeg将流(使用H264编码后)发送到facebook live。但是,流不稳定,在几分钟内断开连接。 如果直接(不带canvas.captureStream)发送视频和音频曲目(使用getMediaUser),则效果良好。我怀疑这与音轨不正确有关,因此facebook拒绝了它(ffmpeg没有特别的错误,只是存在IO错误)。需要帮助找出正确的方式发送画布流和音频

当前ffmpeg命令如下所示

ffmpeg -i - -c:v libx264 -crf 23 -preset ultrafast \
       -tune zerolatency -max_muxing_queue_size 1000 \
       -vsync cfr -async 1 -bufsize 2M -r 30 -g 60 -keyint_min 30 \
       -x264opts keyint=30 -pix_fmt yuv420p -level 3 \
       -c:a aac -b:a 96k -ar 96000 \
       -f  tee -map 0:v -map 0:a [f=flv] <rtmp url 1>  | [f=flv] <rtmp url 2>
FFMPEG:[flv @ 0x5626ecf0f7c0] Failed to update header with correct duration.
[flv @ 0x5626ecf0f7c0] Failed to update header with correct filesize.

FFMPEG:[tee @ 0x5626ec8550c0] Slave muxer #1 failed, aborting.
av_interleaved_write_frame(): Broken pipe
FFMPEG:[flv @ 0x5626ecbe8840] Failed to update header with correct duration.

FFMPEG:[flv @ 0x5626ecbe8840] Failed to update header with correct filesize.

FFMPEG:frame= 2378 fps= 22 q=22.0 Lsize=N/A time=00:01:21.17 bitrate=N/A dup=2202 drop=5 speed=0.745x    
video:18916kB audio:959kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown

FFMPEG:[libx264 @ 0x5626ec855b80] frame I:80    Avg QP:13.97  size:115968
[libx264 @ 0x5626ec855b80] frame P:2298  Avg QP:16.77  size:  4392
[libx264 @ 0x5626ec855b80] mb I  I16..4: 100.0%  0.0%  0.0%

FFMPEG:[libx264 @ 0x5626ec855b80] mb P  I16..4:  3.8%  0.0%  0.0%  P16..4:  9.5%  0.0%  0.0%  0.0%  0.0%    skip:86.7%
[libx264 @ 0x5626ec855b80] coded y,uvDC,uvAC intra: 26.3% 42.2% 13.6% inter: 2.9% 6.1% 0.1%
[libx264 @ 0x5626ec855b80] i16 v,h,dc,p: 34% 26% 23% 17%
[libx264 @ 0x5626ec855b80] i8c dc,h,v,p: 46% 27% 20%  7%
[libx264 @ 0x5626ec855b80] kb/s:1954.96
[aac @ 0x5626ec84d200] Qavg: 122.161
Conversion failed!
注意:getUserMedia中给出的音频约束如下


    canvasStream = canvas.captureStream(30);
    audioTrack = stream.getTracks().filter( (track) => {
          return track.kind === 'audio';
        })[0];
    canvasStream.addTrack(audioTrack);

audio: {
        sampleRate: 44100, 
        echoCancellation: true
      }
退出时ffmpeg给出的错误如下

ffmpeg -i - -c:v libx264 -crf 23 -preset ultrafast \
       -tune zerolatency -max_muxing_queue_size 1000 \
       -vsync cfr -async 1 -bufsize 2M -r 30 -g 60 -keyint_min 30 \
       -x264opts keyint=30 -pix_fmt yuv420p -level 3 \
       -c:a aac -b:a 96k -ar 96000 \
       -f  tee -map 0:v -map 0:a [f=flv] <rtmp url 1>  | [f=flv] <rtmp url 2>
FFMPEG:[flv @ 0x5626ecf0f7c0] Failed to update header with correct duration.
[flv @ 0x5626ecf0f7c0] Failed to update header with correct filesize.

FFMPEG:[tee @ 0x5626ec8550c0] Slave muxer #1 failed, aborting.
av_interleaved_write_frame(): Broken pipe
FFMPEG:[flv @ 0x5626ecbe8840] Failed to update header with correct duration.

FFMPEG:[flv @ 0x5626ecbe8840] Failed to update header with correct filesize.

FFMPEG:frame= 2378 fps= 22 q=22.0 Lsize=N/A time=00:01:21.17 bitrate=N/A dup=2202 drop=5 speed=0.745x    
video:18916kB audio:959kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown

FFMPEG:[libx264 @ 0x5626ec855b80] frame I:80    Avg QP:13.97  size:115968
[libx264 @ 0x5626ec855b80] frame P:2298  Avg QP:16.77  size:  4392
[libx264 @ 0x5626ec855b80] mb I  I16..4: 100.0%  0.0%  0.0%

FFMPEG:[libx264 @ 0x5626ec855b80] mb P  I16..4:  3.8%  0.0%  0.0%  P16..4:  9.5%  0.0%  0.0%  0.0%  0.0%    skip:86.7%
[libx264 @ 0x5626ec855b80] coded y,uvDC,uvAC intra: 26.3% 42.2% 13.6% inter: 2.9% 6.1% 0.1%
[libx264 @ 0x5626ec855b80] i16 v,h,dc,p: 34% 26% 23% 17%
[libx264 @ 0x5626ec855b80] i8c dc,h,v,p: 46% 27% 20%  7%
[libx264 @ 0x5626ec855b80] kb/s:1954.96
[aac @ 0x5626ec84d200] Qavg: 122.161
Conversion failed!
非常感谢您的帮助

我怀疑这与音轨不合适有关,因此facebook拒绝了它

是的,这是正确的。Facebook需要一个音频曲目,如果没有,它会删除你的流

对于初学者,从FFmpeg命令中删除
-ar 96000
。这将设置一个96 kHz的采样率,这是Facebook不想要的。你真的不想在FFmpeg上重新采样。。。让它使用从浏览器获得的任何采样率

接下来,在
getUserMedia
约束上,将音频采样率设置为48 kHz,而不是44.1 kHz。Facebook不能很好地处理RTMP上44.1 kHz的音频。(目前,除非您的目标是CD音频,否则一般情况下,您希望对所有内容使用48 kHz,即44.1 kHz。)

接下来,FFmpeg音频命令将输出到两个RTMP URL。如果一个失败了,他们两个都会失败。如果一个落后了,他们两个都会停滞不前。这可能不是您想要的。:-)放下其中一个

现在,确保你有一个体面和一致的帧速率。Facebook对此非常挑剔,会删除你的流

要进行测试/调试,请使用磁盘上的简单FLV文件替换RTMP URL输出,以确保从浏览器到FFmpeg都能正常工作。一旦你一切顺利,你可以重新连接到Facebook,从那里开始