[关闭]
@Weil 2015-10-28T02:54:13.000000Z 字数 3090 阅读 1103

@(HTML5)
前端

前端视频播放调研

需求

  • 支持hls视频格式。
  • 支持AndroidiOSWeb播放视频。
  • 统计视频开始、暂停、正在播放中,结束事件。
  • 统计用户何时进入页面,并且在页面待了多久。

多端播放技术方案选型

统计用户视频留存时间和页面留存时间

视频播放数据上报实现

由于Android只统计了开始播放事件,不做过多处理。

iOS视频播放统计上报使用HTML5原生API实现,如下:

  1. // videoStart 视频开始播放
  2. videoEle.addEventListener("play", function(e){
  3. upVideoDataTools.videoStart();
  4. console.log("start");
  5. }, false);
  6. // videoPause 视频暂停播放
  7. videoEle.addEventListener("pause", function(e){
  8. upVideoDataTools.videoPause();
  9. console.log("pause");
  10. }, false);
  11. // videoEnd 视频播放结束
  12. videoEle.addEventListener("ended", function(e){
  13. upVideoDataTools.videoEnd();
  14. console.log("end");
  15. });
  16. // 每隔30S上传一次视频播放信息 videoPlaying
  17. window.setInterval(function(){
  18. if(videoEle.played && videoEle.played.length > 0){
  19. var currentTime = videoEle.currentTime;
  20. var duration = videoEle.duration;
  21. if(currentTime < duration){
  22. upVideoDataTools.videoPlaying();
  23. console.log("playing");
  24. }
  25. }
  26. }, 30000);

Flash引入方式

  1. var parameters = {
  2. src: queryParam.videoSrc, //视频的url
  3. autoPlay: "false",
  4. verbose: true,
  5. controlBarAutoHide: "true",
  6. controlBarPosition: "bottom",
  7. poster: "images/poster.png",
  8. javascriptCallbackFunction: "jsbridge",
  9. plugin_hls: "../flash/flashlsOSMF.swf", // hls解码插件的地址
  10. hls_minbufferlength: -1,
  11. hls_maxbufferlength: 30,
  12. hls_lowbufferlength: 3,
  13. hls_seekmode: "KEYFRAME",
  14. hls_startfromlevel: -1,
  15. hls_seekfromlevel: -1,
  16. hls_live_flushurlcache: false,
  17. hls_info: false,
  18. hls_debug: false,
  19. hls_debug2: false,
  20. hls_warn: false,
  21. hls_error: false,
  22. hls_fragmentloadmaxretry : -1,
  23. hls_manifestloadmaxretry : -1,
  24. hls_capleveltostage : false,
  25. hls_maxlevelcappingmode : "downscale"
  26. };
  27. swfobject.embedSWF(
  28. "../flash/GrindPlayer.swf" // flash视频播放器地址
  29. , "ppscFlashVideo" // 页面中的ID
  30. , '100%'
  31. , '100%'
  32. , "10.1.0"
  33. , "expressInstall.swf" // flash安装提示 可忽略
  34. , parameters // 一些必备参数 在上面写到了
  35. , {
  36. allowFullScreen: "true",
  37. wmode: wmodeValue
  38. }
  39. , {
  40. name: "GrindPlayer" // 视频播放器的名字 引入多个视频的时候需要考虑
  41. }
  42. );
  1. function jsbridge(playerId, event, data) {
  2. switch(event) {
  3. case "onJavaScriptBridgeCreated":
  4. break;
  5. case "timeChange":
  6. // 视频开始播放
  7. if(isPlayStart === false && data.currentTime > 0 && data.currentTime < 1){
  8. upVideoDataTools.videoStart();
  9. isPlayStart = true;
  10. }
  11. // 视频正在播放
  12. if(isCanUpPlaying === true && isPlayStart === true && isComplete === false){
  13. upVideoDataTools.videoPlaying();
  14. // 由于无法实时查看视频播放状态 只能在触发该事件的时候检查是否过了30S
  15. isCanUpPlaying = false;
  16. // 记得定时器要清除
  17. if(upPlayingTimer != null){
  18. window.clearTimeout(upPlayingTimer);
  19. }
  20. upPlayingTimer = window.setTimeout(function(){
  21. isCanUpPlaying = true;
  22. }, 30000);
  23. }
  24. break;
  25. case "paused":
  26. // 视频播放暂停
  27. upVideoDataTools.videoPause();
  28. break;
  29. case "complete":
  30. // 视频播放完成
  31. if(isComplete === false){
  32. isComplete = true;
  33. upVideoDataTools.videoEnd();
  34. }
  35. break;
  36. default:
  37. // console.log("*", event, data);
  38. }
  39. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注