可以使用ffmpeg流式传输到Facebook,但在使用tee时则不能



我正在尝试使用ffmpeg同时流式传输到YouTube和Facebook。

我可以单独执行它们,但我想使用"tee"将编码结果发送到两个地方。

如果我这样做:

ffmpeg -re -i pipe:0 -acodec libfdk_aac -bsf:a aac_adtstoasc 
    -ar 44100 -b:a 128k -pix_fmt yuv420p -profile:v baseline 
    -s 720x480 -bufsize 2048k -vb 1300k -maxrate 4000k -deinterlace 
    -vcodec libx264 -g 25 -r 25 
    -f flv "rtmp://rtmp-api.facebook.com:80/rtmp/key"

它工作得很好。

但如果我这样做:

ffmpeg -re -i pipe:0 -acodec libfdk_aac -bsf:a aac_adtstoasc 
    -ar 44100 -b:a 128k -pix_fmt yuv420p -profile:v baseline 
    -s 720x480 -bufsize 2048k -vb 1300k -maxrate 4000k -deinterlace 
    -vcodec libx264 -g 25 -r 25 
    -f tee -map 0:v -map 0:a 
    "[f=flv]rtmp://rtmp-api.facebook.com:80/rtmp/key"

然后我收到一个 rtmp 104 错误。

如果这可行,那么我可以做:

        "[f=flv]rtmp://rtmp-api.facebook.com:80/rtmp/key|[f=flv]rtmp://youtube.etc"

这将流向两者。

我确实发现我需要"-bsf:a aac_adtstoasc",否则编码器坏了,抱怨位畸形。

有什么想法吗?

错误只与Facebook有关。YouTube工作正常。

控制台输出:

  Metadata:
    encoder         : Lavf57.72.101
    Stream #0:0: Video: h264 (libx264), yuv420p, 720x480 [SAR 8:9 DAR 4:3], q=-1--1, 1300 kb/s, 29.97 fps, 29.97 tbn, 29.97 tbc
    Metadata:
      encoder         : Lavc57.95.101 libx264
    Side data:
      cpb: bitrate max/min/avg: 2000000/0/1300000 buffer size: 2048000 vbv_delay: -1
    Stream #0:1: Audio: aac (libfdk_aac), 44100 Hz, stereo, s16, 128 kb/s
    Metadata:
      encoder         : Lavc57.95.101 libfdk_aac
frame=   61 fps= 30 q=25.0 size=N/A time=00:00:01.97 bitrate=N/A speed=0.961x        
WriteN, RTMP send error 104 (136 bytes)

FLV 格式需要全局标头。当ffmpeg输出到FLV直接-f flv时,编码器会发出信号以产生全局标头。但是,当-f tee是主/父多路复用器时,不会设置该标志。因此,必须通过手动设置 -flags +global_header .

最新更新