IE上的RTMP流在~1秒后死亡

时间:2014-05-09 10:40:59

标签: video video-streaming jwplayer rtmp jwplayer6

后续行动:RTMP stream plays sound for 1 second, then stops - no video at all

这里的行为真的很奇怪。

我的配置:

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服务器是nginx with rtmp module,正在监听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正如预期的那样工作,虽然这是一个完全不同的神奇世界:

  1. 一旦我打开页面,我几乎可以立即听到音频,然后加载视频需要一些时间,一旦加载,它播放约1秒,然后音频停止和视频冻结。
  2. 如果我切换到质量较低的流,同样的情况发生 - 我几乎可以立即听到音频,加载视频需要时间,一旦加载 - ~1s就死了。
  3. 如果我重新启动ffmpeg进纸器而不暂停/关闭播放器/流本身,那么,在很短的时间后播放器开始播放两者,音频和视频没有中断。如果在某些时候我再次更改流或重新加载页面 - 我们又回到#1。然后我可以再次重启ffmpeg馈线,视频将继续,好像什么都没发生一样。
  4. 我觉得这可能是MxPEG直播流的一个问题,因为它使用了自己的编解码器并且与默认编解码器有一些区别,其中一个是http://developer.mobotix.com/docs/params.html

      

    而不是I帧......

         

    使用当前的MxPEG实现,无法告诉编解码器包括完整的JPEG帧,例如,每秒或每20帧。因此,没有其他编解码器知道的I-Frame概念。但是上面描绘的方式,跳回一秒并开始解码,可以作为一种实用的解决方法。

    有关于编解码器本身的额外信息here

    虽然,即使存在这样的差异,但这并不能解释为什么只有IE不起作用(但是,如果我在播放器从RTMP读取时重新启动源,则没有问题)。

    我在这里找不到线索,我尝试用AAC将FLV编解码器更改为x264 - Chrome,Opera,Firefox,Safari工作,IE没有(不同的问题)。

    我还尝试使用相同的RTMP输出选项将ffmpeg静态视频文件作为输入(Blenders的Sintel视频,mp4) - 我遇到了一致的问题,视频在所有浏览器上都很混乱,但确实发挥了作用。

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

1 个答案:

答案 0 :(得分:0)

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

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

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

wait_video on;

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