FFMPEG:Youtube流质量和速度问题

时间:2019-02-24 09:20:03

标签: ffmpeg youtube streaming icecast shoutcast

我正在尝试从Icecast / Shoutcast服务器到YouTube在线直播。我使用的命令是:

<html>
<head>

<script>

var data = [{id:12,user:'jack',email:'jack@zzz.com'},
        {id:14,user:'dan',email:'dan@zzz.com'}]

		
function populate_table() {
   let table = document.getElementById('demo_table');
   for(var i = 0; i < data.length; i++) {
        let row = table.insertRow(-1);
		let cell = row.insertCell(0);
		let text = document.createTextNode(data[i].email);
        cell.appendChild(text);
		cell = row.insertCell(0);
		text = document.createTextNode(data[i].user);
        cell.appendChild(text);
		cell = row.insertCell(0)
		text = document.createTextNode(data[i].id);
        cell.appendChild(text);
   }
}

</script>
</head>
<button onclick="populate_table()">Populate table</button>

<table id="demo_table">
    <thead>
        <tr>
            <th>id</th>
            <th>username</th>
            <th>email</th>
        </tr>
    </thead>
    <tbody>
    </tbody>
</table>

</html>

如您所见,我正在为YouTube使用建议的比特率,请每2秒插入关键帧,并以每秒30帧的速度进行流传输。 流正在运行,但运行一段时间后,发生了两件事:

  1. FFMPEG ffmpeg -v verbose -framerate 30 -loop 1 -i /var/image.jpg -re -i http://127.0.0.1:4700/radio -c:v libx264 -preset ultrafast -b:v 2250k -maxrate 6000k -bufsize 6000k -c:a copy -ab 128k -s 1920x1080 -framerate 30 -g 60 -keyint_min 60 -f flv rtmp://a.rtmp.youtube.com/live2/xxx 从1x下降到speed
  2. Youtube开始抱怨视频流速度慢,将质量标记为差,有时视频开始缓冲。

为什么会这样? CPU负载正常,连接正常(流正在1Gg / s专用服务器上运行)。

由于在上面的示例中,我正在流传输单个图像作为流的徽标,所以我还尝试使用该图像生成一个短短30秒的视频,并播放该视频而不是图像,但这也没有帮助。

我用于转换的命令:

0.998x

并通过

进行广播
ffmpeg -framerate 30 -loop 1 -i /var/image.jpg -c:v libx264 -preset ultrafast -tune stillimage  -b:v 2250k -minrate 2250k -maxrate 6000k -bufsize 6000k -framerate 30 -g 60 -keyint_min 60 -t 30 out4.mp4

ffmpeg版本为ffmpeg -stream_loop -1 -i out4.mp4 -re -i http://127.0.0.1:4700/radio -c:v copy -c:a copy -framerate 30 -g 60 -keyint_min 60 -f flv rtmp://a.rtmp.youtube.com/live2/xxx

2 个答案:

答案 0 :(得分:1)

您确定原始视频流确实与壁钟同步吗?

取决于它的编码方式,它可能会严重偏斜。最终导致缓冲不足(如果速度过快,则超出极限),并导致玩家抱怨/跳过。

您可以尝试将价值几个小时的流转储到文件中,然后使用FFmpeg进行流传输吗?如果这样有效,则表明您的原始流计时(采样率)已关闭。

正确设置采样率是专业/昂贵声卡使用高精度Quartz-Crystal控制振荡器的原因。纯粹的虚拟处理(例如文件被编码为流)很容易产生偏差,尤其是在虚拟机内部。此外,就频率准确性和稳定性而言,便宜的USB声卡通常是最糟糕的选择。

FFmpeg可以选择处理速度太慢的输入。关键字可以是“填充”或“缺少样本”。

答案 1 :(得分:0)

Youtube上的错误消息:“ ... buffer .....”不是PC上的缓冲区问题,只是发送到youtube的数据太小了。

1)请注意,[-preset ultrafast][-preset fast]并没有太大的区别。

2)将您的ffmpeg命令更改为广播一号。 (例如[-b:v 2250k][-b:v 15000k],并将fps设置为12→[-r 12]选项。

我会的。

ffmpeg -stream_loop -1 -i out4.mp4 -re -i http://127.0.0.1:4700/radio -preset fast -r 12 -framerate 30 -g 60 -video_track_timescale 1000 -b:v 15000k -f flv  rtmp://a.rtmp.youtube.com/live2/xxx

我希望这对你有好处!(^ v ^)Y