1

后续:RTMP流播放声音1秒,然后停止-根本没有视频

这里的行为真的很奇怪。

我的配置:

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 秒,然后音频停止并且视频冻结。
  2. 如果我切换到较低质量的流,也会发生同样的情况 - 我几乎可以立即听到音频,加载视频需要时间,一旦加载 - 约 1 秒就死了。
  3. 如果我在不暂停/关闭播放器/流本身的情况下重新启动 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 - 我遇到了一致的问题,视频在所有浏览器上都卡顿,但确实可以播放。

但是,是的,有人可能知道这里出了什么问题?

4

1 回答 1

0

我发现了问题所在:https ://github.com/arut/nginx-rtmp-module/issues/340

实际上,文档甚至说它应该默认启用:https ://github.com/arut/nginx-rtmp-module/wiki/Directives#wait_video

是的,显然,如果您正在为 RTMP 托管运行 nginx rtmp 模块,您需要设置:

wait_video on;

在您的 RTMP 应用程序的配置块中。

于 2014-05-13T14:11:50.053 回答