触摸设备上的VideoJS播放器覆盖按钮

3

我正在使用VideoJs 4.2播放器。

在iOS设备的Safari浏览器中打开videojs播放器时,默认情况下会使用本机控件。 当我暂停播放器时,我在视频上显示叠加按钮(链接到其他页面)。但是如果我在iOS上点击按钮,则无法触发。在桌面浏览器中运行良好。

如果我将nativeControlsForTouch设置为false,则会显示自定义控件。在这里,叠加按钮和自定义控件是可以工作的,但会很慢,我无法在视频上滚动,并且不如本机控件平滑。

请给我建议

  1. 如果我使用原生控件,则必须使叠加按钮正常工作
  2. 如果我使用自定义控件,则视频播放器将与本机控件相比更加流畅

这是我的代码:

videojs("ex_video",{"controls":true, "preload":"metadata","width":"auto", "height":"auto",
      "poster":"/images/test.png"},function(){
        var current_player=this; 
        current_player.imageOverlay({
          opacity: 0.5,
          height: '100%',
          width: '50%'
        });
      current_player.on("pause", function(){
        current_player.bigPlayButton.show();

      });
    current_player.on("play", function(){ 
      current_player.bigPlayButton.hide();
    });
});

覆盖按钮代码
(function(vjs) {
  var
   extend = function(obj) {
    var arg, i, k;
    for (i = 1; i < arguments.length; i++) {
     arg = arguments[i];
     for (k in arg) {
      if (arg.hasOwnProperty(k)) {
      obj[k] = arg[k];
      }
    }
  }
return obj;
},

defaults = {
  image_url: '',
  click_url: '',
  start_time: null,
  end_time: null,
  opacity: 0.7,
  height: '15%',
  width: '100%'
},

imageOverlay = function(options) {

var player = this,
    settings = extend({}, defaults, options || {}),
    showingImage = false;

if (settings.start_time === null)
  settings.start_time = 0;

if (settings.end_time === null)
  settings.end_time = player.duration() + 1;

overlay = {

  showImage: function() {
    if (showingImage) {

      return;
    }
    showingImage = true;
    var holderDiv = document.createElement('div');
    holderDiv.id = 'vjs-image-overlay-holder';
    holderDiv.style.height = settings.height;
    holderDiv.style.width = settings.width;
    holderDiv.style.opacity=settings.opacity;

    var overlayLbl1= document.createElement('label');
    overlayLbl1.setAttribute('class','heading-overlay-video');
    overlayLbl1.innerHTML= "Like this class? Why not:";
    var topVideoP=overlay.createEl(overlayLbl1);
    topVideoP.className=topVideoP.className+' top-video-control-overlay';
    holderDiv.appendChild(topVideoP);

    //Save to queue
    var overlayBtn1=document.createElement('button');
    overlayBtn1.value = 'Save to queue';
    overlayBtn1.innerHTML='Save to queue';
    overlayBtn1.setAttribute('class','white medium');
    holderDiv.appendChild(overlay.createEl(overlayBtn1));

    //Add to series button
    var overlayBtn2=document.createElement('button');
    overlayBtn2.value = 'Add to series';
    overlayBtn2.innerHTML='Add to series';
    overlayBtn2.setAttribute('class','white medium');
    holderDiv.appendChild(overlay.createEl(overlayBtn2));

    var overlayLbl2= document.createElement('label');
    overlayLbl2.innerHTML= "music credits";
    overlayLbl2.setAttribute('class','msg-blue');
    var btmVideoP=overlay.createEl(overlayLbl2);
    btmVideoP.className=btmVideoP.className+' bottom-video-control';
    holderDiv.appendChild(btmVideoP);



    player.el().appendChild(holderDiv);
  },
  hideImage: function() {
    if (!showingImage) {
      return;
    }
    showingImage = false;
    player.el().removeChild(document.getElementById('vjs-image-overlay-holder'));
  },
  createEl:function(ele_obj){
    var overlayP=document.createElement('p');
    overlayP.setAttribute('class','overlay-video-content-in');
    overlayP.appendChild(ele_obj);
    return overlayP ;
  }
};
var setTimeoutControl;

player.on('pause', function(){
 setTimeoutControl= setTimeout(function(){overlay.showImage()},5000);

});
player.on('play', function(){ 
  clearTimeout(setTimeoutControl);
  overlay.hideImage();
});    
}; 
vjs.plugin('imageOverlay', imageOverlay); 
}(window.videojs));

展示你的代码。你尝试了什么? - Tushar Gupta - curioustushar
2个回答

1

默认情况下,浏览器中的HTML5视频将在iPod、iPhone的本地播放器中打开。您需要将HTML内容包装在Webview中,并像本机应用程序一样运行它,以在iPod、iPhone中查看视频。

请参见iPhone vs iPad / Browser上的HTML5内联视频

因此,必须对HTML进行这两个更改。

<video id="xxx" width="xx" height="xx" webkit-playsinline>

Obj-C

webview.allowsInlineMediaPlayback = YES;

在所有其他设备上,它将在没有这些的情况下正常工作。

谢谢回复,我没有使用 Obj-C。这只是一个 HTML5 视频播放器(videojs)。我在 video 标记中使用了 webkit-playsinline,但它没有起作用。 - maheshiv
除非您将HTML5视频包装到本机Web视图中并添加这两个属性,否则无法在iPod或iPhone上使用自定义控件播放HTML5视频。 - Sarath
请问您能否举个例子来说明如何在 JavaScript 中使用 webview.allowsInlineMediaPlayback = YES? - maheshiv
通过纯HTML和JS是不可能的,您需要通过Web View将其转换为本机应用程序才能在iPod / iPhone上播放视频。 - Sarath

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接