这里的行为真的很奇怪。
我的配置:
jwplayer('canvas').setup({
file : "stream.smil",
width : 1024,
height : 768,
stagevideo : false,
autostart : true
});
stream.smil
:
<smil>
<head>
<meta base="rtmp://192.168.1.160:1340/live/" />
</head>
<body>
<switch>
<video src="large" width="1024" height="768" system-bitrate="2000000" />
<video src="small" width="640" height="480" system-bitrate="800000" />
</switch>
</body>
</smil>
所以,好吧,关闭stagevideo
(GPU 渲染)有助于处理白色视频,但音频问题仍然存在,不过,我有一些新信息。
我的 RTMP 服务器是带有 rtmp 模块的 nginx,正在监听1340
(正如 smil 建议的那样)。
我有一个 Mobotix IP 摄像机,它的输出用作我的 ffmpeg 的输入,然后提供给 RTMP 服务器:
ffmpeg -f mxg -i "http://admin:meinsm@192.168.1.161:80/control/faststream.jpg?stream=MxPEG&needlength" -f flv -ar 44100 -s 1024x768 "rtmp://localhost:1340/live/large"
Chrome、Firefox、Opera、Safari 按预期运行,但 IE 却是一个完全不同的神奇世界:
- 一旦我打开页面,我几乎可以立即听到音频,然后加载视频需要一些时间,一旦加载,它会播放大约 1 秒,然后音频停止并且视频冻结。
- 如果我切换到较低质量的流,也会发生同样的情况 - 我几乎可以立即听到音频,加载视频需要时间,一旦加载 - 约 1 秒就死了。
- 如果我在不暂停/关闭播放器/流本身的情况下重新启动 ffmpeg 馈送器,那么,在很短的时间后,播放器开始播放音频和视频而不会中断。如果在某个时候我再次更改流或重新加载页面 - 我们又回到了 #1。然后我可以再次重新启动 ffmpeg feeder,视频将继续播放,就好像什么都没发生一样。
我觉得这可能是 MxPEG 直播流的问题,因为它使用自己的编解码器并且与默认编解码器有一些不同,其中之一是(http://developer.mobotix.com/docs/params.html):
而不是 I 帧...
使用当前的 MxPEG 实现,没有办法告诉编解码器包含一个完整的 JPEG 帧,例如,每秒或每 20 帧。因此,没有其他编解码器已知的 I-Frame 概念。但是上面勾勒的方式,跳回一秒并开始解码,可能是一种实用的解决方法。
这里有关于编解码器本身的额外信息。
虽然,即使有这样的差异,也不能解释为什么只有 IE 不起作用(不过,如果我在播放器从 RTMP 读取时重新启动提要没有问题)。
我在这里没有线索,我尝试使用 AAC 将 FLV 编解码器更改为 x264 - Chrome、Opera、Firefox、Safari 有效,IE 无效(但问题不同)。
我还尝试使用相同的 RTMP 输出选项将静态视频文件作为输入(Blenders 的 Sintel 视频,mp4)提供给 ffmpeg - 我遇到了一致的问题,视频在所有浏览器上都卡顿,但确实可以播放。
但是,是的,有人可能知道这里出了什么问题?