ffmpeg流被YouTube拒绝,因为它太慢了

时间:2019-09-15 12:14:38

标签: ffmpeg video-streaming youtube-data-api

我有一个将WebM视频发送到服务器上的套接字的应用,然后套接字执行ffmpeg将视频转换为flv并将其发送到youtube rtmp ingester。

事实是,YouTube拒绝该视频流,说不管我做什么,广播状态都不正确。

在我的天真环境中,我最初尝试流式传输1080p和720p,但是失败了,所以我失败了,假设这可能对比特率问题有所帮助...没有。

Youtube给我的错误是西班牙语,但它基本上表示流太慢,我应该降低分辨率或比特率(我已经是@ 240p,并且不起作用)。

编辑:这是错误,已翻译:

  

主要广播:   YouTube接收的视频不足以保证广播流畅。将会发生缓冲。

     

主广播:我们没有以足够快的速度接收视频数据。您的听众可能会感到缓冲。确保连接速度足够快,否则请考虑使用较低的比特率。

到目前为止,这是我对ffmpeg的呼叫(如果需要的话,语言为node.js。):

const ffmpeg = child_process.spawn('ffmpeg', [

    '-f', 'lavfi', '-i', 'anullsrc',

    //    '-re', // I was told i shouldnt use this parameter. i dont know, honestly.



    // FFmpeg will read input video from STDIN
    '-i', '-',

    // Because we're using a generated audio source which never ends,
    // specify that we'll stop at end of other input.  Remove this line if you
    // send audio from the browser.
    '-shortest',

    '-vcodec', 'libx264',

    '-acodec', 'aac',

    //ffmpeg
    //-re -loop 1
    //-framerate 2 -i test1.jpg -i https://xxxxxxxxxxx:8443/live.ogg
    //-c:a aac
    //-s 2560x1440
    //-ab 128k -vcodec libx264 -pix_fmt yuv420p -maxrate 2048k -bufsize 2048k
    //'-framerate', '30',
    '-r', '24',
    //'-s', '2560x1440',


    '-force_key_frames','expr:gte(t\,n_forced/2)',

    '-preset', 'ultrafast',
    '-pix_fmt', 'yuv420p',
    '-s', '426x240',
    '-crf', '23',
    '-bf', '2',
    '-q:a', '1',
    '-ac', '2',
    '-ar','48000',
    '-use_editlist','0',
    '-movflags','+faststart',
    //  '-ab', '128k',
    '-g', '48',

    //'-minrate', '1500k',
    '-minrate', '1000k',
    '-maxrate', '2000k',

    '-bufsize', '2000k',/*
    '-g', '30',*/
    //'-keyint_min', '30',
    //'-t', '30',

    ////
    '-deadline', 'realtime',
    '-cpu-used','-16',

    '-tune', 'zerolatency',

    '-threads', '4',

    //-g 2 -strict experimental -f flv rtmp://a.rtmp.youtube.com/live2/xxxxxxxxxxxxx


    // FLV is the container format used in conjunction with RTMP
    '-f', 'flv',



    // The output RTMP URL.
    // For debugging, you could set this to a filename like 'test.flv', and play
    // the resulting file with VLC.  Please also read the security considerations
    // later on in this tutorial.
    rtmpUrl
]);

编辑:只要套接字接收到数据,输入就会通过stdin输入。

在我完全没有受过教育的观点中,“-deadline realtime”和“ -tune zerolatency”部分似乎有所帮助,但不足以让我顺其自然。”

以下是ffmpeg的一些输出:

FFmpeg STDERR: frame=   35 fps=3.1 q=23.0 size=     104kB time=00:00:08.44 bitrate= 100.4kbits/s dup=0 drop=3 speed=0.76x    
FFmpeg STDERR: frame=   35 fps=3.0 q=23.0 size=     104kB time=00:00:08.44 bitrate= 100.4kbits/s dup=0 drop=3 speed=0.726x    
FFmpeg STDERR: frame=   35 fps=2.9 q=23.0 size=     104kB time=00:00:08.44 bitrate= 100.4kbits/s dup=0 drop=3 speed=0.696x    
FFmpeg STDERR: frame=   36 fps=2.8 q=23.0 size=     109kB time=00:00:09.45 bitrate=  94.6kbits/s dup=0 drop=3 speed=0.747x    
FFmpeg STDERR: frame=   36 fps=2.7 q=23.0 size=     109kB time=00:00:09.45 bitrate=  94.6kbits/s dup=0 drop=3 speed=0.719x    
FFmpeg STDERR: frame=   38 fps=2.8 q=23.0 size=     121kB time=00:00:11.45 bitrate=  86.7kbits/s dup=0 drop=3 speed=0.839x   

这真令人沮丧。

请大家,任何指导都是好的。我应该最大化或最小化什么?我怎么做?老实说,我不关心其他任何事情(例如视频死机或有时严重像素化),我只是关心能够流式传输

在此先感谢您为我提供的帮助!

更新:我创建了一个新的广播,它具有可变的比特率,并向它广播,它处于“状态:最佳”状态几秒钟,然后fps和速度下降,流回到“状态:不正确” < / p>

0 个答案:

没有答案