【发布时间】:2018-01-16 01:28:44
【问题描述】:
我正在尝试在 ionic 3 移动应用程序内播放视频 - 我想避免启动本机视频播放器。
我正在 iPhone 5s - iOS 10 上进行测试。
这是我创建的一个函数,用于根据我阅读的所有内容加载视频:
loadVideo(src: string, onComplete?: (src: string) => void): void {
var video: HTMLVideoElement = document.createElement('video');
video.setAttribute('playsinline', '');
video.setAttribute('webkit-playsinline', '');
video.setAttribute('src', src);
var onVideoLoaded = () => {
video.removeEventListener('loadeddata', onVideoLoaded);
if (onComplete != null) onComplete(src);
};
video.addEventListener('loadeddata', onVideoLoaded);
video.load();
}
加载完成后,我通过 video.play() 播放。
这个函数的另一个版本是:
loadVideo(src: string, onComplete?: (src: string) => void): void {
var video: HTMLVideoElement = document.createElement('video');
video.setAttribute('playsinline', '');
video.setAttribute('webkit-playsinline', '');
var srcElement: HTMLSourceElement = document.createElement('source');
srcElement.setAttribute('src', src);
srcElement.setAttribute('type', 'video/mp4');
var onVideoLoaded = () => {
video.removeEventListener('loadeddata', onVideoLoaded);
if (onComplete != null) onComplete(src);
};
video.addEventListener('loadeddata', onVideoLoaded);
video.appendChild(srcElement);
video.load();
}
它使用源元素而不是视频元素中的源属性。
我还尝试直接在 HTML 中编写视频标签,以防 Angular 有一些代码可以解决这个问题:
<video playsinline webkit-playsinline autoplay muted">
<source src="test.mp4" type="video/mp4">
</video>
由于不应该为未静音的视频支持自动播放,因此我尝试通过 HTML 添加 muted 属性。 通过 JavaScript 添加它时,将其添加为属性时似乎没有效果,而是我正在编写 video.muted = true。
我尝试的另一件事是通过用户交互而不是自动播放来播放静音视频:
window.addEventListener('pointerdown', () => video.play());
我还尝试使用这个 polyfill,它应该在 iOS 8 和 9 上模仿 iOS 10 的 playinline:
enableInlineVideo(video, false);
https://github.com/bfred-it/iphone-inline-video
我尝试的一切最终都得到了相同的结果 - 在 iOS 上,视频在本机播放器中全屏播放,即使它应该内联播放,而在 Android 上它按预期内联播放。
【问题讨论】:
标签: javascript ios angular cordova ionic-framework