2

我已按照演练使 IIS 平滑流发布点支持 Apple 设备,但遇到了一个问题:<video>标记的目标 URL 生成 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浏览器中键入 URL 时,我得到了基于 Silverlight 的流式传输的正确 XML 文件,但添加(format=m3u8-aapl)(format=m3u8-aapl).m3u8(根据这些说明)会导致 404。

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

  • 该 URL给了我与Silverlighthttp://10.1.1.22/video.isml/manifest(foo=bar)完全相同的响应。/manifest
  • 该 URLhttp://10.1.1.22/video.isml/manifest(format=foo)给了我一个 404。
  • URLhttp://10.1.1.22/video.isml/manifest.m3u8给出 400 错误请求。
  • 该 URLhttp://10.1.1.22/video.isml/manifest(foo=bar).m3u8为我提供了 Silverlight 响应。

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

4

1 回答 1

2

在探索了一些相关问题后,我发现了这个答案流需要使用 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这个问题,其他人也有完全相同的问题。修复是授予IIS_IUSRS帐户对C:\inetpub\media\archivesSmooth Streaming 保存其视频块的文件夹的完全控制权。然后事情开始起作用了。

简而言之:

  • 在提供视频流的计算机上,安装 CCCP、Unreal Media Server 和 Unreal Live Server。
  • 在服务器上,授予IIS_IUSRS(或在您的 Windows/IIS 版本上运行的任何用户应用程序池)权限以修改保存视频片段的文件夹,可能C:\inetpub\media\archives
于 2014-11-12T21:37:27.673 回答