3.10 lua项目如何使用VideoPlayer

require(“experimentalUIConstants”)
require(“cocos2d.Cocos2d”)
require(“cocos2d.Cocos2dConstants”)
– 获取目标平台
local targetPlatform = cc.Application:getInstance():getTargetPlatform()

if (cc.PLATFORM_OS_IPHONE == targetPlatform) or (cc.PLATFORM_OS_ANDROID == targetPlatform) then
local videoPlayer = nil
end

–声明VideoPlayerScene类
local VideoPlayerScene = class(“VideoPlayerScene”,function()
return cc.Scene:create()
end)
–静态创建函数
function VideoPlayerScene.create()
local scene = VideoPlayerScene.new()
scene:addChild(scene:createLayerMenu())
return scene
end

–构造函数
function VideoPlayerScene:ctor()
self.visibleSize = cc.Director:getInstance():getVisibleSize()
self.origin = cc.Director:getInstance():getVisibleOrigin()
self.winSize = cc.Director:getInstance():getWinSize()
self.visibleRect = cc.Director:getInstance():getOpenGLView():getVisibleRect()
self.centerPos = cc.p(self.visibleRect.x + self.visibleRect.width / 2,self.visibleRect.y + self.visibleRect.height /2)
self.schedulerID = nil

local function onNodeEvent(event)
    if event == "enter" then
        self:onEnter()
    end
end
self:registerScriptHandler(onNodeEvent)

end

function VideoPlayerScene:onEnter()
cclog(“onEnter”)
if (cc.PLATFORM_OS_IPHONE == targetPlatform) or (cc.PLATFORM_OS_ANDROID == targetPlatform) then
local videoFullPath = cc.FileUtils:getInstance():fullPathForFilename(“oceans.mp4”)
videoPlayer:setFileName(videoFullPath)
videoPlayer:play()
end
end

–播放背景音乐
function VideoPlayerScene:playBgMusic()
AudioEngine.playMusic(“bg.mp3”,true)
end

– create menu 创建菜单层
function VideoPlayerScene:createLayerMenu()
local layerMenu = cc.Layer:create()

local titleLabel = cc.Label:createWithTTF("MyVideoPlayer", "fonts/Marker Felt.ttf", 28)
titleLabel:setAnchorPoint(cc.p(0.5, 0.5))
titleLabel:setPosition(3 * self.winSize.width /4 , self.winSize.height - 50)
layerMenu:addChild(titleLabel, 1)

 cc.MenuItemFont:setFontSize(18)

 local videoStateLabel = cc.Label:createWithSystemFont("IDLE","Arial",16)
 videoStateLabel:setAnchorPoint(cc.p(1, 0.5))
 videoStateLabel:setPosition(cc.p(self.visibleRect.x + self.visibleRect.width - 10,self.visibleRect.y + 200))
 layerMenu:addChild(videoStateLabel)
 
 --创建视频播放器
 if (cc.PLATFORM_OS_IPHONE == targetPlatform) or (cc.PLATFORM_OS_ANDROID == targetPlatform) then

    local function onVideoEventCallback(sener, eventType)
       if eventType == ccexp.VideoPlayerEvent.PLAYING then
           videoStateLabel:setString("PLAYING")
       elseif eventType == ccexp.VideoPlayerEvent.PAUSED then
           videoStateLabel:setString("PAUSED")
       elseif eventType == ccexp.VideoPlayerEvent.STOPPED then
           videoStateLabel:setString("STOPPED")
       elseif eventType == ccexp.VideoPlayerEvent.COMPLETED then
           videoStateLabel:setString("COMPLETED")
       end
    end
    
    videoPlayer = ccexp.VideoPlayer:create()
    videoPlayer:setPosition(centerPos)
    videoPlayer:setAnchorPoint(cc.p(0.5, 0.5))
    videoPlayer:setContentSize(cc.size(self.winSize.width /2,self.winSize.height /2))
    videoPlayer:addEventListener(onVideoEventCallback)
    videoPlayer:setPosition(cc.p(0,self.winSize.height /2))
    layerMenu:addChild(videoPlayer)
    --全屏回调
    local function menuFullScreenCallback(tag, sender)
       if nil  ~= videoPlayer then
           videoPlayer:setFullScreenEnabled(not videoPlayer:isFullScreenEnabled())
       end
    end
    --暂停回调
    local function menuPauseCallback(tag, sender)
       if nil  ~= videoPlayer then
           videoPlayer:pause()
       end
    end
    --返回回调
    local function menuResumeCallback(tag, sender)
        if nil  ~= videoPlayer then
            videoPlayer:resume()
        end
    end
    --停止回调
    local function menuStopCallback(tag, sender)
        if nil  ~= videoPlayer then
            videoPlayer:stop()
        end
    end
    --隐藏回调
    local function menuHintCallback(tag, sender)
        if nil  ~= videoPlayer then
            videoPlayer:setVisible(not videoPlayer:isVisible())
        end
    end
    --播放本地资源回调
    local function menuResourceVideoCallback(tag, sender)
        if nil ~= videoPlayer then
            local videoFullPath = cc.FileUtils:getInstance():fullPathForFilename("oceans.mp4")
            videoPlayer:setFileName(videoFullPath)   
            videoPlayer:play()
        end
    end
    --播放网络资源回调
    local function menuonlinevideocallback(tag, sender)
        if nil ~= videoplayer then
            videoplayer:seturl("http://101.200.53.213/res/video/oceans.mp4")
            videoplayer:play()
        end
    end
    --伸缩比例回调
    local function menuRatioCallback(tag, sender)
        if nil ~= videoPlayer then
            videoPlayer:setKeepAspectRatioEnabled(not videoPlayer:isKeepAspectRatioEnabled())
        end
    end
end

local fullSwitch = cc.MenuItemFont:create("FullScreenSwitch")
fullSwitch:setAnchorPoint(cc.p(0.0, 0.0))
fullSwitch:setPosition(cc.p(self.visibleRect.x + self.visibleRect.width - 200,self.visibleRect.y + 50))

local pauseItem = cc.MenuItemFont:create("Pause")
pauseItem:setAnchorPoint(cc.p(0.0, 0.0))
pauseItem:setPosition(cc.p(self.visibleRect.x + self.visibleRect.width - 200,self.visibleRect.y + 100))

local resumeItem = cc.MenuItemFont:create("Resume")
resumeItem:setAnchorPoint(cc.p(0.0, 0.0))
resumeItem:setPosition(cc.p(self.visibleRect.x + self.visibleRect.width - 200,self.visibleRect.y + 150))

local stopItem = cc.MenuItemFont:create("Stop")
stopItem:setAnchorPoint(cc.p(0.0, 0.0))
stopItem:setPosition(cc.p(self.visibleRect.x + self.visibleRect.width - 200,self.visibleRect.y + 200))

local hintItem = cc.MenuItemFont:create("Hint")
hintItem:setAnchorPoint(cc.p(0.0, 0.0))
hintItem:setPosition(cc.p(self.visibleRect.x + self.visibleRect.width - 200,self.visibleRect.y + 250))

local resourceVideo = cc.MenuItemFont:create("Play resource video")
resourceVideo:setAnchorPoint(cc.p(0, 0))
resourceVideo:setPosition(cc.p(self.visibleRect.x + self.visibleRect.width - 200,self.visibleRect.y + 300))

local onlineVideo = cc.MenuItemFont:create("Play online video")
onlineVideo:setAnchorPoint(cc.p(0, 0))
onlineVideo:setPosition(cc.p(self.visibleRect.x + self.visibleRect.width - 200,self.visibleRect.y + 350))
   
local ratioSwitch = cc.MenuItemFont:create("KeepRatioSwitch")
ratioSwitch:setAnchorPoint(cc.p(0, 0))
ratioSwitch:setPosition(cc.p(self.visibleRect.x + self.visibleRect.width - 200,self.visibleRect.y + 400))

local menu = cc.Menu:create(fullSwitch, pauseItem, resumeItem, stopItem, hintItem, resourceVideo, onlineVideo, ratioSwitch)
menu:setPosition(cc.p(0,0))
layerMenu:addChild(menu)

--注册回调事件
if (cc.PLATFORM_OS_IPHONE == targetPlatform) or (cc.PLATFORM_OS_ANDROID == targetPlatform) then
    fullSwitch:registerScriptTapHandler(menuFullScreenCallback)
    pauseItem:registerScriptTapHandler(menuPauseCallback)
    resumeItem:registerScriptTapHandler(menuResumeCallback)
    stopItem:registerScriptTapHandler(menuStopCallback)
    hintItem:registerScriptTapHandler(menuHintCallback)
    resourceVideo:registerScriptTapHandler(menuResourceVideoCallback)
    onlineVideo:registerScriptTapHandler(menuOnlineVideoCallback)
    ratioSwitch:registerScriptTapHandler(menuRatioCallback)
end

--self:playBgMusic()
return layerMenu  

end

return VideoPlayerScene