cocos2d-x lua 播放视频,VideoPlayer在Android和IOS下的坑,

公司的游戏需要将一段动画做在启动的时候
cocos2d-x lua 使用了ccexp.VideoPlayer,windows下是不能播放的,所以项目在windows下还是继续使用图片


代码如下
local visibleSize = cc.Director:getInstance():getVisibleSize()
if device.platform == "android" or device.platform == "ios" then
        local videoPlayer = ccexp.VideoPlayer:create() --创建
        local function onVideoEventCallback(sener, eventType)    --播放完成回调
            if eventType == ccexp.VideoPlayerEvent.COMPLETED then
                self:goUpdateLayer()  --播放完成的回调函数,可以修改
                videoPlayer:stop()
                videoPlayer:runAction(
                cc.Sequence:create(
                cc.CallFunc:create(callback),
                cc.RemoveSelf:create()))
            end
        end
        videoPlayer:setPosition(cc.p(display.cx, display.cy))
        videoPlayer:setAnchorPoint(cc.p(0.5, 0.5))
        videoPlayer:setContentSize(cc.size(display.cx, display.cy))
        videoPlayer:setFileName("hall_res/Login_Video.mp4")    --资源文件位置
        videoPlayer:setKeepAspectRatioEnabled(true)
        videoPlayer:setTouchEnabled(false)
        videoPlayer:setFullScreenEnabled(true)
        videoPlayer:setVisible(true)
        videoPlayer:addEventListener(onVideoEventCallback)
        self:addChild(videoPlayer)
        videoPlayer:play()
    end


不得不说坑是真的多
1、Android下会出现可以点击暂停的现象,需要修改java部分的代码
在Cocos2dxVideoView.java 的201行,2行注释掉,这样就没点击响应了
public boolean onTouchEvent(MotionEvent event) {
if((event.getAction() & MotionEvent.ACTION_MASK) == MotionEvent.ACTION_UP)
{            
if (isPlaying()) 
{                
//pause();            

else if(mCurrentState == STATE_PAUSED)
{                //resume();            
}        
}        return true;
}


这样安卓的就完成了
然后真正的大坑就是IOS了
2、首先发现IOS不会暂停,但是会弹出播放视频的快进那个界面,WTF
这个oc代码里的视频控件有个样式,更改controlStyle 这个属性,即可隐藏进度条,另外修改userInteractionEn
UIVideoPlayer-ios.mm    
self.moviePlayer.allowsAirPlay = false;    
self.moviePlayer.controlStyle = MPMovieControlStyleNone;//  MPMovieControlStyleEmbedded;

self.moviePlayer.view.userInteractionEnabled = false;//true;


3、IOS第二个坑来了,播放完了,闪退,哈哈哈

看了一下,发现在lua那边去除视频控件的时候发生的异常,IOS这个控件需要下载网络视频,不能播放本地视频

但是,这可能嘛?

搜索了一波,连google都没

于是做了一个延迟事件,解决了,不知道是不是给自己埋了一个坑

videoPlayer:runAction(
                cc.Sequence:create(
                cc.CallFunc:create(callback),
                cc.RemoveSelf:create()))
            end

代码如下,然后把播放结束后的函数放在这个前面,不然会出现黑屏闪屏的现象

然后IOS不闪退了

但是发现,初始的时候是黑屏,很难看

看了看腾讯的游戏,初始是有一张图片的

在Xcode那,有个LaunchImage属性,点击项目->General->App Icons and Launch Images,使用LauchImage

然后在BuildSetting里有个Asset Catalog Launch Image Set Name设置自己本地的图片,运行吧!


除了上述问题,该视频控件目前只能遮盖在用户显示层的上层,对于某些比如嵌入播放之类操作,依然有很多问题,希望cocos能后续继续完善。


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值