cocos2dx 播放视频插件, lua绑定, 播放完毕回调

写了个cocos2dx 播放视频插件, 写的不好, 欢迎拍砖:7:

项目地址:

https://github.com/liang8305/cocos2dx_videoview_extends

#cocos2dx 播放视频插件

##特性:

  • lua绑定
  • 播放完成事件回调
  • 支持android, ios平台

##使用示例:

-- 播放完之后的回调函数
local function videoFinish()
    print("================videoFinish")
    --恢复游戏, 和原来的声音
    cc.Director:getInstance():startAnimation();
    cc.SimpleAudioEngine:getInstance():resumeMusic();
end

-- 原游戏, 声音暂停
cc.Director:getInstance():stopAnimation();
cc.SimpleAudioEngine:getInstance():pauseMusic();
VideoView:play("res/video2.mp4",videoFinish)

##添加步骤:

  1. 一下文件拷贝到对应的目录里

Classes/VideoView.h
Classes/lua_videoview_extends.h
Classes/lua_videoview_extends.cpp

#android
proj.android/src/cn/sharedream/game/VideoView.java
proj.android/jni/VideoViewAndroidImp.cpp

#ios
proj.ios_mac/ios/VideoViewIOSImp.h
proj.ios_mac/ios/VideoViewIOSImp.mm

  1. AppDelegate.cpp 注册VideoView 的lua 扩展

#include “lua_videoview_extends.h”

bool AppDelegate::applicationDidFinishLaunching()
{

 auto engine = LuaEngine::getInstance();
 ScriptEngineManager::getInstance()->setScriptEngine(engine);

 //==============添加lua 扩展
 lua_State* L = engine->getLuaStack()->getLuaState();
 tolua_videoview_extension_open(L);
     //==============添加lua 扩展end
     
 if (engine->executeScriptFile("src/main.lua")) {
     return false;
 }

 return true;

}

  1. android部分 修改jni 的 Android.mk 添加VideoViewAndroidImp.cpp 和 lua_videoview_extends.cpp 编译

LOCAL_SRC_FILES := …
VideoViewAndroidImp.cpp
…/…/Classes/lua_videoview_extends.cpp

##TODO:

  • 播放时点击视频回调

##文件说明

Classes/VideoView.h:

VideoView类接口定义

Classes/lua_videoview_extends.h(cpp):

将VideoView类绑定到lua

proj.android/src/cn/sharedream/game/VideoView.java

android 原生视频播放器实现, 播放完毕回调native callback

proj.android/jni/VideoViewAndroidImp.cpp

android实现, 通过jni调用 VideoView.java 的播放方法, 并实现native callback

proj.ios_mac/ios/VideoViewIOSImp.h
proj.ios_mac/ios/VideoViewIOSImp.mm

ios实现, 通过 MPMoviePlayerController 进行播放

好东西,先看看着,有空验证一下。

能出个WIN32的吗视频播放吗

不错,3.x也新增了视频播放模块。

楼主把代码格式化一下吧~:14::14:

lua 自己写了个例子 坐标错位么。
c++实现 是没有错得
代码如下 帮忙看下

local videoPlayer = ccexp.VideoPlayer:create()
local function onVideoEventCallback(sener, eventType)
if eventType == ccexp.VideoPlayerEvent.COMPLETED then
videoPlayer:setVisible(false)
cclog(“COMPLETED”)
end
end
if nil ~= videoPlayer then

        videoPlayer:setPosition(cc.p(m_winSize.width/2,m_winSize.height/2))
        videoPlayer:setAnchorPoint(cc.p(0.5, 0.5))
        videoPlayer:setContentSize(cc.size(m_winSize.width/2,m_winSize.height/4))
        videoPlayer:setKeepAspectRatioEnabled(false)
        videoPlayer:setTouchEnabled(false)
        videoPlayer:setFullScreenEnabled(true)
        videoPlayer:addEventListener(onVideoEventCallback)
        layerFarm:addChild(videoPlayer)
        videoPlayer:setFileName("res/start.mp4")
        videoPlayer:play()
    end

先收起来……看起来很快就会用到……

我搞定了 UIVideoPlayerIOS.mm 需要更新。。官方不是最新版。

好东西,刚好用得到

Xcode上修改之后 可以播放 Code ide 上不行 提示方法有误 应该是绑定的lua 方法木有绑定成功 安卓的还没测试

VideoPlayer是 a nil value