html5及android多個視頻連續播放問題

<!DOCTYPE html>
<html>

<head>
	<meta http-equiv=Content-Type content="text/html; charset=utf-8">
	<title>h5test</title>

	<style type="text/css">
    body, html {
      height: 100%;
      width: 100%;
    }
    *{
      margin:0px;
      padding:0px;
    }
    
    #mapArea {
      position:absolute;
      width:20%;
      height:20%;
      right:15px;
      top:15px;
      z-index:2;
    }
    #video1 {
      position:absolute;
      width:100%;
      height:95%;
    }
    #controlArea {
      position:absolute;
      background-color:#eee;
      width:100%;
      height:5%;
      bottom:0px;
      text-align:center;
    }
    #play {
      margin:auto;
      width:100px;
      height:40px;
    }
</style>
	<script charset="utf-8" src="http://map.qq.com/api/js?v=2.exp"></script>
	<script charset="utf-8" src="js/jquery-1.8.0.min.js"></script>
	<script charset="utf-8" src="js/jquery-jsonp.js"></script>
	<script charset="utf-8" src="js/html5Preloader.js"></script>
</head>

<body οnlοad="init();">
	<div id="mapArea"></div>
	<div id="videoArea">
		<video id="video1" preload="auto">
			<source src="" type="video/mp4"/>
			Your browser does not support HTML5 video.
		</video>
	</div>
	<div id="controlArea">
		<button id="play" οnclick="playPause()">播放/暫停</button>
	</div>

	<script type="text/javascript">
  // var playList = new Array("http://125.39.210.20/mobile/mobile2_hd1.mp4", "http://125.39.210.20/mobile/mobile2_hd2.mp4", "upload/mov_bbb.mp4", "upload/2.mp4");
  var playList = new Array();
  var currentIndex = 0;
  var myVideo1=document.getElementById("video1");

  myVideo1.addEventListener("ended", 
    function() {
      if(currentIndex >= playList.length)
        return;
      // alert("ReadyState:" + myVideo2.readyState + "Start: " + myVideo2.buffered.start(0) + " End: "  + myVideo2.buffered.end(0));
      getVideo(myVideo1, currentIndex++);
      myVideo1.play();
    }, false);

  function init() {
    var min = 10;
    var max = 17;
    var map = new qq.maps.Map(document.getElementById("mapArea"), {
      // 地圖的中心地理座標。
      center: new qq.maps.LatLng(39.91474,116.37333),
      zoom:10,
      minZoom: min,
      maxZoom: max
    });
    getPlayList();
  }

  function playPause()
  {

    if (myVideo1.paused) 
      myVideo1.play(); 
    else 
      myVideo1.pause();
  }

  function getVideo(video, i) {           
    if (i < playList.length && playList[i] != "") {
      video.src = playList[i];
    } else {
      alert("Enter a valid video URL");  // fail silently
    }
  }

  function getPlayList(){
    var gurl = 'http://125.39.210.20/videoindex' + "?callback=?";

    $.jsonp({
      url: gurl,
      data: {track_id:7},
      success: function (data, textStatus, xOptions) {
        var myLoader = html5Preloader();      //預加載視頻
        // myLoader.addFiles("http://123.151.37.91/vcloud.tc.qq.com/1019_229bd248a5594e9e98fdd3e047328fcb.f0.mp4" 
        //   + "?vkey=5907698E6251D230B8E61D9458C06E2AA26CF3D44F7E8866A8B46DDC9639D689D8E605C494CC9891"
        //   + "&sha=3c87b52f0177e20de9f834b14099b7faa860e69b");
        for (var video in data.videos) {
          playList[data.videos[video].order - 1] = data.videos[video].url;
          myLoader.addFiles(data.videos[video].url);
          
        };
        getVideo(myVideo1, currentIndex++);
      },
      error: function (xOptions, textStatus) {
        alert(xOptions + "error2 status: "+ textStatus);
      }
    });
  }
</script></body>
</html>

          街景地圖有好多短小的視頻,要求把這些短視頻串起來播放,首先做成網頁版的html5格式,可以支持在網頁中通過微信分享。

          1、html5有專門播放視頻的video控件,可以直接播放視頻,在第一個視頻播放完畢後改變src加載第二個視頻。

這樣有一個問題就是視頻切換的時候存在閃爍黑屏。

優酷上的長視頻(比如2小時)其實是有好多小視頻(6分鐘)拼接起來的,在網頁上用的是flash,可以實現基本感受不到的切換耗時(這個實現調了一個很長的js腳

本)。在手機上用的是html5的video標籤,在每個視頻切換時會轉緩衝圈,時間很短,說明做過預加載。騰訊視頻上的長視頻(比如兩小時)其實就是一個長視頻,所以好處

理。

也問過騰訊視頻那邊的負責人,他們說視頻拼接播放實現很困難。我也嘗試過做下一個視頻的預加載,網上找了一個html5perloader.js的開源代碼,不過很奇怪的原

因,用chrome的F12的network調試的時候發現有的視頻第二次加載是從cache,而我試線上的視頻就不是了,可能我沒用對html5perloader吧,不過這個開源代碼沒有文檔,

自己看了它的代碼,只怪自己沒做過js,所以沒怎麼看懂。

上面是我寫的html5的代碼,很簡單,中間訪問線上視頻的時候出現了access-origin跨域的問題,可以參考這個鏈接http://blog.csdn.net/net_lover/article/details/5172509/

2、Android端主要用videoview控件實現多個視頻的連續播放,也是在第一個視頻播放完成後出發completed事件播放下一個視頻,自己在網上找了一個通過socket建立代

理服務器的預加載方法,鏈接爲:http://blog.csdn.net/hellogv/article/details/7911293,這是一個系列。

另外我發現當completed事件發生時加載本地的視頻在不同的手機上也

會出現不同的效果,有的停頓時間很短有的停頓時間很長。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章