我正试图同时使用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)发布于 2017-05-16 04:37:42
FLV格式需要全局报头。当ffmpeg输出到FLV直接-f flv时,编码器被发出信号以产生全局报头。但是,当-f tee是主/父muxer时,没有设置该标志。因此,它必须通过-flags +global_header手动设置。
https://stackoverflow.com/questions/43968879
复制相似问题