VideoPlayer无法播放视频

  • Creator 版本:2.3.3

  • 目标平台: < Web Mobile>

  • 详细报错信息,包含调用堆栈:

  • 重现方式:在苹果手机上用网页端打开无法播放视频。在安卓手机上可以播放视频

  • 出现概率:每次都出现

  • 额外线索:

如果h5运行在微信浏览器,那可以尝试:

document.addEventListener("WeixinJSBridgeReady", function () { 
    this.videoPlayer.play(); 
}.bind(this), false);

点击触摸的方式我试过了。 还是没有反应。

不至于点击都不能出发播放,可能哪里用法没对,贴出代码看看呢

我这里是发布web mobile 在苹果手机上不能播放视频。其他发布安卓 或者IOS 是可以的。// 播放本地视频
startLoacVideo: function(filepath)
{
let self = this;
if(cc.sys.platform != cc.sys.IPHONE || cc.sys.platform != cc.sys.IPAD)
{
self.videoPlayer.stop();
}
this.btnclose.node.active = false;
this.loadend = true;
this.gbtime = 60;

    ManagerHelp_SetWaitLockLayer(WAIT_OPENED);
    self.videoPlayer.node.active = true;
    self.videoPlayer.resourceType =  cc.VideoPlayer.ResourceType.LOCAL;    // 加载本地视频
    cc.loader.loadRes(filepath, cc.Asset, function(err, clip) 
    {
        if(!err)
        {
            self.videoPlayer.clip = clip;
            console.log("视频地址:"+ clip);
        }
    });


    document.addEventListener("WeixinJSBridgeReady", function () { 

        console.log("微信回调");
        this.onPlayVideo.play(); 
        WeixinJSBridge.call('hideOptionMenu');
    }.bind(this), false);

    
},


// 播放视频
startplayvideo : function(strurl, videconame, dirname, flgupdata)
{
    //视频资源远程链接地址 ,资源名称 ,资源上级目录名称 , 是否需要更新 , 返回用本地1 或者 远程2  资源地址 
    //window.mfConfig.LoadVideo = function(strUrl, imgname, dirname, flgupdata , callback)

    let self = this;

    this.btnclose.node.active = false;
    this.loadend = true;
    this.gbtime = 60;

    ManagerHelp_SetWaitLockLayer(WAIT_OPENED);

    window.mfConfig.LoadVideo(strurl,videconame,dirname,flgupdata,function(flglocal, filepath)
    {
        if(cc.sys.platform != cc.sys.IPHONE || cc.sys.platform != cc.sys.IPAD)
        {
            self.videoPlayer.stop();
        }

        if(flglocal == 2)       // 播放视频
        {
            self.videoPlayer.resourceType =  cc.VideoPlayer.ResourceType.REMOTE;    // 加载远程视频
            self.videoPlayer.remoteURL = filepath; // 设置远程视频地址

            // ManagerHelp_SetSystemLabel("播放远程地址" + filepath);
        }
        else if(flglocal == 1)   // 播放本地视频
        {
            self.videoPlayer.resourceType = cc.VideoPlayer.ResourceType.LOCAL;     // 加载本地视频
            self.videoPlayer.clip = filepath;

            // this.videoPlayer.impl.setURL(cc.url.raw('resources/video/xx.mp4'), this.mute || this._volume === 0); 
            // this.videoPlayer.impl.setURL(filepath, true); 
          
        }

        self.videoPlayer.node.active = true;
    
    });
},

// 视频回调
PlayVideoCallBack: function(sender, event)
{
    let self = this;
    // PLAYING	表示视频正在播放中。
    // PAUSED	表示视频暂停播放。
    // STOPPED	表示视频已经停止播放。
    // COMPLETED	表示视频播放完成。
    // META_LOADED	表示视频的元信息已加载完成,你可以调用 getDuration 来获取视频总时长。
    // CLICKED	表示视频被用户点击了。
    // READY_TO_PLAY	表示视频准备好了,可以开始播放了

    if(event == cc.VideoPlayer.EventType.READY_TO_PLAY)
    {
        window.mfConfig.StopAllAudio();
        ManagerHelp_SetWaitLockLayer(WAIT_CLOSED);

        console.log("视频加载完成");
        
        this.node.runAction(cc.sequence(cc.delayTime(0.1),cc.callFunc(function(sender)
        {
           self.onPlayVideo();
        })));

       
    }
    else if(event == cc.VideoPlayer.EventType.COMPLETED)
    {
        ManagerHelp_SetWaitLockLayer(WAIT_CLOSED);
        this.btnclose.node.active = true;
        this.CloseView();
    }
    else if(event == cc.VideoPlayer.EventType.META_LOADED)
    {
        this.gbtime = this.videoPlayer.getDuration() + 5;
    }
},

update (dt) {
    if(this.loadend)
    {
        if(this.gbtime <= 0)
        {
            this.loadend = false;
            this.btnclose.node.active = true;
            this.CloseView();
        } 
        this.gbtime = this.gbtime - dt;
    } 
},

onPlayVideo: function()
{
    if(cc.sys.platform != cc.sys.IPHONE || cc.sys.platform != cc.sys.IPAD)
    {
        console.log("开始播放视频");
        this.videoPlayer.play();
    } 
}

1、这个操作异步性强,
cc.loader.loadRes(filepath, cc.Asset, function (err, clip) {
if (!err) {
self.videoPlayer.clip = clip;
console.log(“视频地址:” + clip);
}
});
可能点击回调videoPlayer.play时这里还没加载完成。
还不如:
let localUrl = cc.url.raw(“resources/…/.mp4”);
self.videoPlayer.resourceType = cc.VideoPlayer.ResourceType.REMOTE;
self.videoPlayer.remoteURL = localUrl;

2、点击回调如果是onPlayVideo,那么判断cc.sys.platform != cc.sys.IPHONE || cc.sys.platform != cc.sys.IPAD干嘛?
3、"WeixinJSBridgeReady"监听回调中this.onPlayVideo.play();这个代码有问题哦

2、点击回调如果是onPlayVideo,那么判断cc.sys.platform != cc.sys.IPHONE || cc.sys.platform != cc.sys.IPAD干嘛?之前版本ios包不能播放视频加的。我按照你的方法试试看。"WeixinJSBridgeReady"监听回调中this.onPlayVideo.play(); 这里的代码应该怎么写,请指教。谢谢

let localUrl = cc.url.raw(“resources/…/.mp4”);
self.videoPlayer.resourceType = cc.VideoPlayer.ResourceType.REMOTE;
self.videoPlayer.remoteURL = localUrl;
你说的这种方式你试过吗,我这里试了下不管用的。播放本地视频也不能按照你这种写法

this.videoPlayer.play();

抛开所有业务逻辑处理,编辑器中videoPlayer直接挂载好本地资源,一个按钮,点击回调中直接videoPlayer.play();

感谢。试过有些浏览器点击可以播放,有的不行

你可以按这个思路试一下,click事件和videoplayer.play()写在同一帧里面。

你好 我也是发布在web mobile上苹果手机不能播放视频 这种要怎么解决呢?麻烦您告知一下

你好,这是什么意思呢?