【发布时间】:2015-03-28 23:13:44
【问题描述】:
我正在尝试使用 javascript 动态更改视频源。我有一个带有<video> 元素的网页,它可以播放 HLS 流。这可行,但我无法从脚本动态更改视频。
我真的坚持这一点。我也许可以通过使用 iframe 来解决它,但这会带来其他问题。
有人提示如何使用 i 设备上的视频标签更改 HLS-Stream 而无需关闭整个页面并打开另一个页面?
我知道移动 i-Devices 仅限于播放一个视频 - 但如果视频源是 HLS,真的不可能动态更改视频源吗?
更新: 按照 aldel 的建议,我已将最小样本更新为:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>TestPage</title>
<script type="text/javascript">
function changeVideoSrc(url)
{
var vid = document.getElementById("vid");
vid.src = url;
// Calling load() makes Safari request the segments, but still no video is being displayed:
vid.load();
}
</script>
</head>
<body id="body">
<div id="mainDiv">
<video id="vid" idth="260" height="208" controls src="http://10.42.120.25/hls/cam01.m3u8" type="application/x-mpegurl">No support for video</video>
</div>
<div>
<input type="button" name="Cam01" value="Cam01" onclick="changeVideoSrc('http://10.42.120.25/hls/cam01.m3u8');">
<input type="button" name="Cam02" value="Cam02" onclick="changeVideoSrc('http://10.42.120.25/hls/cam02.m3u8');">
</div>
</body>
</html>
很遗憾,这段代码在 iPad 上仍然无法运行。它适用于 Android 设备,但不适用于 i 设备。
我仍然只能在 iPad 上播放一个 HLS 源: 如果我使用 Safari 到达 iPad 上的页面,我可以点击视频控件的播放按钮,然后视频开始播放。如果我然后单击“Cam02”,视频将停止播放,但没有新视频可播放:我从未在 safari 内的视频控件上获得播放按钮。在服务器端,我可以看到 Safari 正在请求第二个摄像头的 m3u8 文件。但是从来没有请求过任何片段。
如果我在更改 src 属性后调用 load() 会变得更有趣:我在服务器上看到将开始为第二个摄像头请求片段。只是视频窗口保持黑色 - 没有显示任何视频。
这个load()还有一个有趣的效果:如果我到达iPad上的页面,并没有开始播放Cam01,而是点击Cam02按钮,切换到Cam02,然后调用Load我可以开始播放cam02 .
也很有趣:如果我不使用 HLS 源,一切都可以正常工作,而只是一个简单的 mp4,type='video/mp4'。然后我也可以在 iPad 上毫无问题地切换源。
还有其他提示吗?很快我就会说 Apple 只是无法实现对 HLS 的适当支持——尽管他们已经发明了它。 Chrome 只是处理得更好。另请注意,iPad 上的 Chrome 也有完全相同的问题。
【问题讨论】:
标签: javascript ios html5-video http-live-streaming