您的位置:首页 > 移动开发 > Cocos引擎

cocos2dx3.3视频播放的实现VideoPlayer的使用

2016-04-01 11:54 477 查看
最近因为项目需求需要使用到视频播放功能。

在3.x版本之前如果需要用到视频播放功能就要使用原生的视频播放实现技术,好在3.x之后官方已经集成了视频播放功能,这是值得欣慰的。但是欣慰过后的悲剧在于,官方的文档一直跟不上版本的更新速度。虽然集成了这个功能,但是郁闷的是你要花费很大的力气去尝试使用技巧(仅限于类似我这种菜鸟)。

以下为我整了好久才摸到的使用方法,其实使用不难,难的是一定要注意这个集成的播放器(VideoPlayer)是有平台限制的。一些代码只有在android平台和IOS平台有效。废话不多说了,直接上实例代码:

HelloWorldScene.h文件

 

view
sourceprint?

01.
#ifndef
__HELLOWORLD_SCENE_H__


02.
#define
__HELLOWORLD_SCENE_H__


03.
 

04.
#include 
"cocos2d.h"


05.
//务必引入以下2个.h文件


06.
#include 
"ui/UIVideoPlayer.h"


07.
#include 
"ui/CocosGUI.h"


08.
USING_NS_CC;


09.
class
 
HelloWorld
: 
public
 
Layer


10.
{


11.
public
:


12.
static
 
Scene*
createScene();


13.
 

14.
virtual
bool init();


15.
 

16.
void
 
onEnter();


17.
 

18.
void
 
videoPlayOverCallback();


19.
 

20.
void
 
showVideo();


21.
/**


22.
*
视频播放状态,只有在android和ios平台有效


23.
*/


24.
#
if
 
(CC_TARGET_PLATFORM
== CC_PLATFORM_ANDROID || CC_TARGET_PLATFORM == CC_PLATFORM_IOS)


25.
void
 
videoEventCallback(Ref*
sender, cocos2d::experimental::ui::VideoPlayer::EventType eventType);


26.
#endif


27.
 

28.
CREATE_FUNC(HelloWorld);


29.
};


30.
#endif 


HelloWorldScene.cpp文件

 

 

view
sourceprint?

01.
#include 
"HelloWorldScene.h"


02.
 

03.
USING_NS_CC;


04.
 

05.
Scene*
HelloWorld::createScene()


06.
{


07.
auto
scene = Scene::create();


08.
auto
layer = HelloWorld::create();


09.
scene->addChild(layer);


10.
return
 
scene;


11.
}


12.
bool
HelloWorld::init()


13.
{


14.
if
 
(
!Layer::init() )


15.
{


16.
return
 
false
;


17.
}


18.
return
 
true
;


19.
}


20.
 

21.
void
 
HelloWorld::onEnter(){


22.
Layer::onEnter();


23.
showVideo();


24.
}


25.
 

26.
void
 
HelloWorld::showVideo(){


27.
Size
size = Director::getInstance()->getVisibleSize();


28.
#
if
 
(CC_TARGET_PLATFORM
== CC_PLATFORM_ANDROID || CC_TARGET_PLATFORM == CC_PLATFORM_IOS)


29.
auto
videoPlayer = cocos2d::experimental::ui::VideoPlayer::create();


30.
videoPlayer->setPosition(Point(size.width
/ 
2
,
size.height / 
2
));


31.
videoPlayer->setAnchorPoint(Vec2::ANCHOR_MIDDLE);


32.
videoPlayer->setContentSize(Size(size.width
, size.height));


33.
this
->addChild(videoPlayer);


34.
if
 
(videoPlayer)


35.
{


36.
videoPlayer->setFileName(
"1111.mp4"
);


37.
videoPlayer->play();


38.
}


39.
videoPlayer->addEventListener(CC_CALLBACK_2(HelloWorld::videoEventCallback, 
this
));


40.
#endif


41.
}


42.
 

43.
/**


44.
*
视频播放完成的回调函数


45.
*/


46.
void
 
HelloWorld::videoPlayOverCallback()


47.
{


48.
 

49.
}


50.
/**


51.
* 
视频播放的状态


52.
* 
注意这里的代码,此处代码只有在android平台和Ios平台有效


53.
*/


54.
#
if
 
(CC_TARGET_PLATFORM
== CC_PLATFORM_ANDROID || CC_TARGET_PLATFORM == CC_PLATFORM_IOS)


55.
void
 
HelloWorld::videoEventCallback(Ref*
sender, cocos2d::experimental::ui::VideoPlayer::EventType eventType){


56.
switch
 
(eventType)
{


57.
case
 
cocos2d::experimental::ui::VideoPlayer::EventType::PLAYING:


58.
break
;


59.
case
 
cocos2d::experimental::ui::VideoPlayer::EventType::PAUSED:


60.
break
;


61.
case
 
cocos2d::experimental::ui::VideoPlayer::EventType::STOPPED:


62.
break
;


63.
case
 
cocos2d::experimental::ui::VideoPlayer::EventType::COMPLETED:


64.
videoPlayOverCallback();


65.
break
;


66.
default
:


67.
break
;


68.
}


69.
}


70.
#endif


如此即可实现视频播放了,对视频的控制请参考官方demo

原文:http://www.it165.net/pro/html/201501/31423.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: