我已按照演练使 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给了我与Silverlight
http://10.1.1.22/video.isml/manifest(foo=bar)
完全相同的响应。/manifest
- 该 URL
http://10.1.1.22/video.isml/manifest(format=foo)
给了我一个 404。 - URL
http://10.1.1.22/video.isml/manifest.m3u8
给出 400 错误请求。 - 该 URL
http://10.1.1.22/video.isml/manifest(foo=bar).m3u8
为我提供了 Silverlight 响应。
因此,扩展似乎对服务器没有任何意义,但如果括号中的参数不存在,它就无法解析它。更重要的是,很明显服务器处理程序实际上正在运行,/manifest(format=m3u8-aapl)
但在某种子请求中生成 404。我们可以排除服务器不理解 URL 并且未能运行正确的处理程序。