iOS 11 ObjectURL 支持 html5 视频
iOS 11 ObjectURL support for html5 video
我需要一种方法来播放在客户端网络浏览器中创建的 hls m3u8 播放列表,而不是使用外部文件。
我目前正在生成一个字符串并创建一个稍后使用对象 URLs 链接的文件。
const playlistFile = new File([playlistString], playlistName, { type: 'application/x-mpegURL' });
const playlistURL = URL.createObjectURL(playlistFile);
此 URL 然后用作视频元素中的来源。
<video playsinline="" controls="" src="blob:http://localhost:8080/b9a0b81f-d469-4004-9f6b-a577325e2cf3"></video>
该系统在所有 iOS 10 版本和 OSX 上都运行良好,但只要我 运行 它在设备 运行 任何 [=32] 上运行=] 11 版本我从视频元素中得到错误代码 4 "MEDIA_ERR_SRC_NOT_SUPPORTED"。
我找不到任何路径注释说明任何可能表明改变为什么这在 iOS 11 中不起作用的内容。
有没有其他方法可以解决这个问题,适用于 iOS 10 和 11?
如有对此问题的任何帮助或见解,我们将不胜感激。
编辑:
我创建了一个 jsfiddle 来帮助理解这个问题。
https://jsfiddle.net/x2oa8nh2/8/
上面的视频适用于 iOS 10 和 11(以及 OSX Safari)。底部的不适用于 iOS 11.
可能有点老套,但如果您使用 base64 数据 URI,它将解决此问题。在我的用例中,我使用的是 HLS M3U8 播放列表,因此 MIME 类型已相应调整:
const m3u8 = "[M3U8 string data]";
const hlsMimeType = "application/vnd.apple.mpegurl";
nativeVideo.type = hlsMimeType;
nativeVideo.src = `data:${hlsMimeType};base64,${btoa(m3u8)}`;
看起来它将在 anything that supports HTML5 video 上实际工作。
我需要一种方法来播放在客户端网络浏览器中创建的 hls m3u8 播放列表,而不是使用外部文件。
我目前正在生成一个字符串并创建一个稍后使用对象 URLs 链接的文件。
const playlistFile = new File([playlistString], playlistName, { type: 'application/x-mpegURL' });
const playlistURL = URL.createObjectURL(playlistFile);
此 URL 然后用作视频元素中的来源。
<video playsinline="" controls="" src="blob:http://localhost:8080/b9a0b81f-d469-4004-9f6b-a577325e2cf3"></video>
该系统在所有 iOS 10 版本和 OSX 上都运行良好,但只要我 运行 它在设备 运行 任何 [=32] 上运行=] 11 版本我从视频元素中得到错误代码 4 "MEDIA_ERR_SRC_NOT_SUPPORTED"。
我找不到任何路径注释说明任何可能表明改变为什么这在 iOS 11 中不起作用的内容。 有没有其他方法可以解决这个问题,适用于 iOS 10 和 11?
如有对此问题的任何帮助或见解,我们将不胜感激。
编辑: 我创建了一个 jsfiddle 来帮助理解这个问题。 https://jsfiddle.net/x2oa8nh2/8/
上面的视频适用于 iOS 10 和 11(以及 OSX Safari)。底部的不适用于 iOS 11.
可能有点老套,但如果您使用 base64 数据 URI,它将解决此问题。在我的用例中,我使用的是 HLS M3U8 播放列表,因此 MIME 类型已相应调整:
const m3u8 = "[M3U8 string data]";
const hlsMimeType = "application/vnd.apple.mpegurl";
nativeVideo.type = hlsMimeType;
nativeVideo.src = `data:${hlsMimeType};base64,${btoa(m3u8)}`;
看起来它将在 anything that supports HTML5 video 上实际工作。