이 기사는 주로 함정을 채우는 html5 비디오 모바일 터미널에 대한 간략한 논의를 소개합니다. 편집자는 이것이 꽤 좋다고 생각합니다. 이제 여러분과 공유하고 참고할 것입니다. 편집자를 따라 살펴보겠습니다. 모두에게 도움이 되기를 바랍니다.
이 기사에서는 html5 비디오 모바일 단말기 작성 팁을 소개하고 모든 사람과 공유합니다. 세부 사항은 다음과 같습니다.
<video id="video" style="object-fit:fill" autoplay webkit-playsinline playsinline x5-video-player-type="h5" x5-video-player-fullscreen="true" x5-video-orientation="portraint" src="video.mp4" /> </video> <!-- object-fit: fill 视频内容充满整个video容器 poster:"img.jpg" 视频封面 autoplay: 自动播放 auto - 当页面加载后载入整个视频 meta - 当页面加载后只载入元数据 none - 当页面加载后不载入视频 muted:当设置该属性后,它规定视频的音频输出应该被静音 webkit-playsinline playsinline: 内联播放 x5-video-player-type="h5" : 启用x5内核H5播放器 x5-video-player-fullscreen="true" 全屏设置。ture和false的设置会导致布局上的不一样 x5-video-orientation="portraint" :声明播放器支持的方向,可选值landscape 横屏,portraint竖屏。 默认值portraint。无论是直播还是全屏H5一般都是竖屏播放, 但是这个属性需要x5-video-player-type开启H5模式 -->
Autoplay
모바일 브라우저에서 자동 재생 속성을 설정
<video autoplay></video>
하지만 많은 모바일 브라우저에서 브라우저에서는 오디오 및 비디오를 자동으로 재생하기 위해 video.play() 호출을 트리거하기 위해 사용자의 실제 작업(touchend, click, doubleclick 또는 keydown 이벤트와 같은 표준 이벤트)이 필요합니다.
dom.addEventListener('click', function () { video.play() })
에서는 wx.ready()
wx.ready(function () { video.play() })
Inline play
iOS Safari 및 일부 Android에서 webkit-playsinline presentsinline
<video id="video" webkit-playsinline playsinline /></video>
속성을 설정하여 video.play()를 실행할 수도 있습니다. 일부 브라우저에서 동영상을 재생하면 h5 페이지에서 동영상을 재생할 수 없습니다. h5 페이지에서 동영상을 재생해야 하는 경우 동영상 태그에 webkit-playsinline을 추가해야 합니다. iOS10에서는 추가가 필요합니다.playsinline에서는 이 두 속성을 동시에 추가하는 것이 좋습니다. 동시에 앱은 이 모드를 지원해야 합니다
webview.allowsInlineMediaPlayback = YES;
ios 모바일 QQ와 WeChat 모두 이 모드를 지원하지만 안드로이드 WeChat이 다운되었습니다
android WeChatandroid WeChat 내장 브라우저는 Tencent X5 커널을 사용하며 X5web 표준을 따르지 않고 비디오를 전체 화면으로 강제하는 것도 그 중 하나입니다. 동영상이 재생되면 QQ의 자체 동영상 추천이 표시됩니다. 화이트리스트가 있으며, 화이트리스트에 있는 동영상 리소스는 전체 화면이 되지 않습니다. 하지만 Tencent는 더 이상 화이트리스트에 추가할 수 없습니다. 비뇨기과, 해결책이 없습니다. . . . . .
현재 h5 캔버스를 사용하여 비디오를 재생하는 솔루션이 있습니다
캔버스를 사용하여 비디오캔버스를 사용할 때 직면하게 되는 함정: 비디오는 x5-video-player-type="h5" 속성을 추가해야 합니다 , 그렇지 않으면 모바일 단말기가 정지되어 비디오를 재생할 수 없습니다. 개인적으로 비디오가 점령되었기 때문이라고 생각합니다. <p class="wrapper">
<video id="video" style="display: none" autoplay src="video.mp4" x5-video-player-type="h5"></video>
<canvas id="canvas"></canvas>
</p>
<script>
var video = document.querySelector('#video')
var canvas = document.querySelector('#canvas')
var wrapper = canvas.parentNode
var width = wrapper.offsetWidth
var height = wrapper.offsetHeight
var ctx = c.getContext('2d')
var time = null
canvas.width = width
canvas.height = height
canvas.addEventListener('click', function () {
video.play()
})
video.addEventListener('play', function () {
time = window.setInterval(function () {
ctx.drawImage(v, 0, 0, width, height);
}, 20);
}, false);
video.addEventListener('pause', function () {
window.clearInterval(time);
}, false);
video.addEventListener('ended', function () {
window.clearInterval(time);
}, false);
</script>
ios 검은화면 문제
ios 동영상 재생시 검은화면이 잠깐 나타났다가 정상적으로 표시됩니다. 해결책:
비디오 위에 p를 덮고 그림으로 채워 재생 전에 로딩되는 듯한 느낌을 줍니다. 그런 다음 이벤트 시간 업데이트를 듣고 비디오 재생에 그림이 있으면 이 "p 블록"을 제거하세요
video.addEventListener('timeupdate', function(){ if(video.currentTime > 0.1){ posterImg.hidden(); } })
HTMLVideoElement 및 HTMLAudioElement는 모두 HTMLMediaElement HTML5 동영상 구현 브라우저 호환 방법 위 내용은 html5 비디오 모바일 단말기에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!// 媒体错误
MediaObj.error; //null:正常
MediaObj.error.code; //1.用户终止 2.网络错误 3.解码错误 4.URL无效
//媒体当前状态
MediaObj.currentSrc; //返回当前资源的URL
MediaObj.src = value; //返回或设置当前资源的URL
MediaObj.canPlayType(type); //是否能播放某种格式的资源
MediaObj.networkState; //0.此元素未初始化 1.正常但没有使用网络 2.正在下载数据 3.没有找到资源
MediaObj.load(); //重新加载src指定的资源
MediaObj.buffered; //返回已缓冲区域,TimeRanges
MediaObj.preload; //none:不预载 metadata:预载资源信息 auto:
//准备状态
MediaObj.readyState;//1:HAVE_NOTHING
//2:HAVE_METADATA
//3.HAVE_CURRENT_DATA
//4.HAVE_FUTURE_DATA
//5.HAVE_ENOUGH_DATA
MediaObj.seeking; //是否正在seeking
//回放状态
MediaObj.currentTime = value; //当前播放的位置,赋值可改变位置
MediaObj.startTime; //一般为0,如果为流媒体或者不从0开始的资源,则不为0
MediaObj.duration; //当前资源长度 流返回无限
MediaObj.paused; //是否暂停
MediaObj.defaultPlaybackRate = value;//默认的回放速度,可以设置
MediaObj.playbackRate = value;//当前播放速度,设置后马上改变
MediaObj.played; //返回已经播放的区域,TimeRanges,关于此对象见下文
MediaObj.seekable; //返回可以seek的区域 TimeRanges
MediaObj.ended; //是否结束
MediaObj.autoPlay; //是否自动播放
MediaObj.loop; //是否循环播放
MediaObj.play(); //播放
MediaObj.pause(); //暂停
//视频控制
MediaObj.controls;//是否有默认控制条
MediaObj.volume = value; //音量
MediaObj.muted = value; //静音
//TimeRanges(区域)对象
TimeRanges.length; //区域段数
TimeRanges.start(index) //第index段区域的开始位置
TimeRanges.end(index) //第index段区域的结束位置
//【★★★**相关事件**★★★】
//事件分发
var eventTester = function(e){
Media.addEventListener(e,function(){
console.log((new Date()).getTime(),e)
},false);
}
//事件监听
eventTester("loadstart"); //客户端开始请求数据
eventTester("progress"); //客户端正在请求数据
eventTester("suspend"); //延迟下载
eventTester("abort"); //客户端主动终止下载(不是因为错误引起)
eventTester("loadstart"); //客户端开始请求数据
eventTester("progress"); //客户端正在请求数据
eventTester("suspend"); //延迟下载
eventTester("abort"); //客户端主动终止下载(不是因为错误引起),
eventTester("error"); //请求数据时遇到错误
eventTester("stalled"); //网速失速
eventTester("play"); //play()和autoplay开始播放时触发
eventTester("pause"); //pause()触发
eventTester("loadedmetadata"); //成功获取资源长度
eventTester("loadeddata"); //
eventTester("waiting"); //等待数据,并非错误
eventTester("playing"); //开始回放
eventTester("canplay"); //可以播放,但中途可能因为加载而暂停
eventTester("canplaythrough"); //可以播放,歌曲全部加载完毕
eventTester("seeking"); //寻找中
eventTester("seeked"); //寻找完毕
eventTester("timeupdate"); //播放时间改变
eventTester("ended"); //播放结束
eventTester("ratechange"); //播放速率改变
eventTester("durationchange"); //资源长度改变
eventTester("volumechange"); //音量改变