iis - 平滑流式传输 Apple URL 给出 404

标签 iis http-live-streaming smooth-streaming

我已按照演练使 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>

请注意,当我输入 URL http://10.1.1.22/video.isml/manifest 时在我的浏览器中,我获得了基于 Silverlight 的流的正确 XML 文件,但添加了 (format=m3u8-aapl)(format=m3u8-aapl).m3u8 (根据 these instructions )导致 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 以及无法运行正确处理程序的可能性。

最佳答案

在探索了一些相关问题后,我发现了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 进程崩溃。对调试提议说"is"后,我看到了 mpeg2tssink.dll 中存在访问冲突的堆栈跟踪。幸运的是,mpeg2tssink.dll 的第一个(也是唯一相关的)Google 搜索结果是 this question其他人也有完全相同的问题。修复方法是授予 IIS_IUSRS 帐户对 Smooth Streaming 保存视频 block 的 C:\inetpub\media\archives 文件夹的完全控制权。然后事情开始起作用。

简而言之:

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

关于iis - 平滑流式传输 Apple URL 给出 404,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26853856/

相关文章:

c# - IIS/MVC 应用程序将所有出站 WebRequest 重定向到本地主机 (127.0.0.1)

javascript - jQuery.parseJSON() 不在 Windows 服务器上解码有效的 Json 字符串

Asp.net session 数据丢失

swift - 在 tvOS/swift 上切换 hls 的字幕

ffmpeg - 如何在窗口上使用 FFMPEG 包设置 FFServer?

asp.net - 1 个唤醒 .NET 的 aspx 文件中的绝对最少代码

android - ExoPlayer Hls 质量

azure - Windows Azure 媒体服务 Apple HLS 流媒体 - 不播放视频,仅播放音频

smooth-streaming - 如何在 Chromecast 中播放流畅的流媒体视频?