> 웹 프론트엔드 > H5 튜토리얼 > html5 비디오 모바일 단말기에 대한 자세한 설명

html5 비디오 모바일 단말기에 대한 자세한 설명

小云云
풀어 주다: 2018-05-24 11:16:11
원래의
7136명이 탐색했습니다.

이 기사는 주로 함정을 채우는 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(&#39;click&#39;, function () {
   video.play()
})
로그인 후 복사

WeChat

에서는 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 WeChat

android 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(&#39;#video&#39;)
  var canvas = document.querySelector(&#39;#canvas&#39;)
  var wrapper = canvas.parentNode
  var width = wrapper.offsetWidth
  var height = wrapper.offsetHeight
  var ctx = c.getContext(&#39;2d&#39;)
  var time = null
  canvas.width = width
  canvas.height = height

  canvas.addEventListener(&#39;click&#39;, function () {
    video.play()
  })

  video.addEventListener(&#39;play&#39;, function () {
      time = window.setInterval(function () {
        ctx.drawImage(v, 0, 0, width, height);
      }, 20);
  }, false);

  video.addEventListener(&#39;pause&#39;, function () {
      window.clearInterval(time);
  }, false);

  video.addEventListener(&#39;ended&#39;, function () {
      window.clearInterval(time);
  }, false);
</script>
로그인 후 복사
마지막으로 동영상을 재생하는 데 캔버스가 사용되지만 Android WeChat에서는 전체 화면 동영상이 재생된 후 추천 동영상을 차단할 수 있다는 사실을 발견했습니다. 하지만 비디오 재생 중에 전체 화면 문제를 비활성화할 수 있는 방법은 없습니다. 여전히 사악한 화이트리스트를 얻으십시오. 불만을 제기하십시오. . . . . . . . . . . . . . . .

더 짜증나는 점은 js를 통해 전체 화면 종료를 실행하는 방법을 찾지 못했다는 것입니다.

ios 검은화면 문제

ios 동영상 재생시 검은화면이 잠깐 나타났다가 정상적으로 표시됩니다. 해결책:

비디오 위에 p를 덮고 그림으로 채워 재생 전에 로딩되는 듯한 느낌을 줍니다. 그런 다음 이벤트 시간 업데이트를 듣고 비디오 재생에 그림이 있으면 이 "p 블록"을 제거하세요

video.addEventListener(&#39;timeupdate&#39;, function(){
  if(video.currentTime > 0.1){
      posterImg.hidden();
  }
})
로그인 후 복사

미디어 메서드 및 속성

HTMLVideoElement 및 HTMLAudioElement는 모두 HTMLMediaElement

// 媒体错误
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"); //音量改变
로그인 후 복사
에서 상속됩니다. 관련 권장 사항:

HTML5 동영상 구현 브라우저 호환 방법

모바일 동영상 재생 문제 사례 요약

위 내용은 html5 비디오 모바일 단말기에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿