Smooth Streaming Apple URL提供404

时间:2014-11-10 22:05:32

标签: iis http-live-streaming smooth-streaming

我按照演练来使IIS平滑流式发布点支持Apple设备,但遇到了问题:<video>标记的目标网址会生成404响应。

我的isml如下:

<?xml version="1.0" encoding="utf-8"?>
<smil xmlns="http://www.w3.org/2001/SMIL20/Language">
  <head>
    <meta name="title" content="" />
    <meta name="module" content="liveSmoothStreaming" />
    <meta name="sourceType" content="Push" />
    <meta name="publishing" content="Fragments;Streams;Archives" />
    <meta name="estimatedTime" content="36000" />
    <meta name="lookaheadChunks" content="2" />
    <meta name="manifestWindowLength" content="0" />
    <meta name="startOnFirstRequest" content="True" />
    <meta name="archiveSegmentLength" content="0" />
    <meta name="formats" content="m3u8-aapl" />
    <meta name="m3u8-aapl-segmentlength" content="10" />
    <meta name="m3u8-aapl-maxbitrate" content="1600000" />
    <meta name="m3u8-aapl-allowcaching" content="False" />
    <meta name="m3u8-aapl-backwardcompatible" content="False" />
    <meta name="m3u8-aapl-enableencryption" content="False" />
    <meta name="filters" content="" />
  </head>
  <body>
  </body>
</smil>

我正在使用的HTML是:

<!doctype html>

<html>
<head>
    <title>Apple streaming IIS test</title>
</head>
<body>
    <h1>Live Stream</h1>

    <video width="640"
           height="360"
           src="http://10.1.1.22/video.isml/manifest(format=m3u8-aapl).m3u8"
           autoplay="true"
           controls="true">
        Live
    </video>
</body>
</html>

请注意,当我在浏览器中输入网址http://10.1.1.22/video.isml/manifest时,我会获得基于Silverlight的流媒体的正确XML文件,但添加(format=m3u8-aapl)(format=m3u8-aapl).m3u8(根据{{ 3}})导致404。

编辑:我已经尝试了一些没有成功的事情,但他们可能会深入了解失败的原因:

  • 网址http://10.1.1.22/video.isml/manifest(foo=bar)为我提供与/manifest完全相同的响应,适用于Silverlight。
  • 网址http://10.1.1.22/video.isml/manifest(format=foo)为我提供了404。
  • 网址http://10.1.1.22/video.isml/manifest.m3u8提供400个错误请求。
  • 网址http://10.1.1.22/video.isml/manifest(foo=bar).m3u8为我提供了Silverlight响应。

所以看起来扩展对服务器没有任何意义,但是如果没有括号参数,它就无法解析它。更重要的是,很明显服务器处理程序实际上正在为/manifest(format=m3u8-aapl)运行,但在某种子请求中生成404。我们可以排除服务器不理解URL并且无法运行正确的处理程序。

1 个答案:

答案 0 :(得分:2)

在探索了一些相关问题之后,我遇到了this answer该流需要使用h.264视频和AAC音频。

不幸的是,它并不那么简单。 Expression Encoder 4的免费版本不支持h.264或AAC;他们被锁定并宣传为付费功能。问题是,微软拒绝再销售Expression Encoder 但仍然没有免费提供这些功能或提供任何替代方案!他们建议的所有第三方选择都是天文数字的,并且面向大公司。

在仔细搜索价格合理的第三方替换后,我遇到了一个名为Unreal Media Server的程序,它都支持h.264 / AAC并将输出到Smooth Streaming发布点。 (还需要安装像CCCP这样的DirectShow编解码器包。)

就在我认为自己已经完成的时候,我惊恐地发现尝试流式传输导致w3wp.exe进程崩溃。对调试要约说'是',向我展示了mpeg2tssink.dll中存在访问冲突的堆栈跟踪。幸运的是,mpeg2tssink.dll的第一个(也是唯一相关的)Google搜索结果是this question,其他人遇到了完全相同的问题。修复方法是授予IIS_IUSRS帐户完全控制{Smooth,以便Smooth Streaming保存其视频块的C:\inetpub\media\archives文件夹。事情就开始起作用了。

简而言之:

  • 在提供视频流的计算机上,安装CCCP,虚幻媒体服务器和虚幻Live Server。
  • 在服务器上,授予IIS_ISURS(或在您的Windows / IIS版本下运行的任何用户应用程序池)权限,以修改保留视频片段的文件夹,可能是C:\inetpub\media\archives