PuzzleSDK
UIVideoPlayerTest.cpp
浏览该文件的文档.
1/****************************************************************************
2 Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.
3
4 http://www.cocos2d-x.org
5
6 Permission is hereby granted, free of charge, to any person obtaining a copy
7 of this software and associated documentation files (the "Software"), to deal
8 in the Software without restriction, including without limitation the rights
9 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 copies of the Software, and to permit persons to whom the Software is
11 furnished to do so, subject to the following conditions:
12
13 The above copyright notice and this permission notice shall be included in
14 all copies or substantial portions of the Software.
15
16 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 THE SOFTWARE.
23 ****************************************************************************/
24
25#include "UIVideoPlayerTest.h"
26
28using namespace cocos2d::ui;
29
30VideoPlayerTests::VideoPlayerTests()
31{
34}
35
37{
38 if ( !UIScene::init() )
39 {
40 return false;
41 }
42
43 _visibleRect = Director::getInstance()->getOpenGLView()->getVisibleRect();
44
45 // Should create video first to make sure video is destryed first. If not, then may crash.
46 // Because when destroying video, it will stop video which may trigger stopped event listener.
48
49 MenuItemFont::setFontSize(16);
50
51 auto fullSwitch = MenuItemFont::create("FullScreenSwitch", CC_CALLBACK_1(VideoPlayerTest::menuFullScreenCallback, this));
52 fullSwitch->setAnchorPoint(Vec2::ANCHOR_BOTTOM_LEFT);
53 fullSwitch->setPosition(Vec2(_visibleRect.origin.x + 10,_visibleRect.origin.y + 50));
54
55 auto pauseItem = MenuItemFont::create("Pause", CC_CALLBACK_1(VideoPlayerTest::menuPauseCallback, this));
56 pauseItem->setAnchorPoint(Vec2::ANCHOR_BOTTOM_LEFT);
57 pauseItem->setPosition(Vec2(_visibleRect.origin.x + 10,_visibleRect.origin.y + 100));
58
59 auto resumeItem = MenuItemFont::create("Resume", CC_CALLBACK_1(VideoPlayerTest::menuResumeCallback, this));
60 resumeItem->setAnchorPoint(Vec2::ANCHOR_BOTTOM_LEFT);
61 resumeItem->setPosition(Vec2(_visibleRect.origin.x + 10,_visibleRect.origin.y + 150));
62
63 auto stopItem = MenuItemFont::create("Stop", CC_CALLBACK_1(VideoPlayerTest::menuStopCallback, this));
64 stopItem->setAnchorPoint(Vec2::ANCHOR_BOTTOM_LEFT);
65 stopItem->setPosition(Vec2(_visibleRect.origin.x + 10,_visibleRect.origin.y + 200));
66
67 auto hintItem = MenuItemFont::create("Hint", CC_CALLBACK_1(VideoPlayerTest::menuHintCallback, this));
68 hintItem->setAnchorPoint(Vec2::ANCHOR_BOTTOM_LEFT);
69 hintItem->setPosition(Vec2(_visibleRect.origin.x + 10,_visibleRect.origin.y + 250));
70
71 //-------------------------------------------------------------------------------------------------------------------
72 auto resourceVideo = MenuItemFont::create("Play resource video", CC_CALLBACK_1(VideoPlayerTest::menuResourceVideoCallback, this));
73 resourceVideo->setAnchorPoint(Vec2::ANCHOR_MIDDLE_RIGHT);
74 resourceVideo->setPosition(Vec2(_visibleRect.origin.x + _visibleRect.size.width - 10,_visibleRect.origin.y + 50));
75
76 auto onlineVideo = MenuItemFont::create("Play online video", CC_CALLBACK_1(VideoPlayerTest::menuOnlineVideoCallback, this));
77 onlineVideo->setAnchorPoint(Vec2::ANCHOR_MIDDLE_RIGHT);
78 onlineVideo->setPosition(Vec2(_visibleRect.origin.x + _visibleRect.size.width - 10,_visibleRect.origin.y + 100));
79
80 auto ratioSwitch = MenuItemFont::create("KeepRatioSwitch", CC_CALLBACK_1(VideoPlayerTest::menuRatioCallback, this));
81 ratioSwitch->setAnchorPoint(Vec2::ANCHOR_MIDDLE_RIGHT);
82 ratioSwitch->setPosition(Vec2(_visibleRect.origin.x + _visibleRect.size.width - 10,_visibleRect.origin.y + 150));
83
84 auto loopToggle = MenuItemFont::create("LoopToogle", CC_CALLBACK_1(VideoPlayerTest::menuLoopCallback, this));
85 loopToggle->setAnchorPoint(Vec2::ANCHOR_MIDDLE_RIGHT);
86 loopToggle->setPosition(Vec2(_visibleRect.origin.x + _visibleRect.size.width - 10,_visibleRect.origin.y + 170));
87
88 auto menu = Menu::create(resourceVideo,onlineVideo,ratioSwitch,loopToggle,fullSwitch,pauseItem,resumeItem,stopItem,hintItem,nullptr);
89 menu->setPosition(Vec2::ZERO);
90 _uiLayer->addChild(menu);
91
92 _videoStateLabel = Label::createWithSystemFont("IDLE","Arial",16);
93 _videoStateLabel->setAnchorPoint(Vec2::ANCHOR_MIDDLE_RIGHT);
94 _videoStateLabel->setPosition(Vec2(_visibleRect.origin.x + _visibleRect.size.width - 10,_visibleRect.origin.y + 200));
95 _uiLayer->addChild(_videoStateLabel);
96
97 _loopStatusLabel = Label::createWithSystemFont("(1)","Arial",10);
98 _loopStatusLabel->setAnchorPoint(Vec2::ANCHOR_MIDDLE_RIGHT);
99 _loopStatusLabel->setPosition(Vec2(_visibleRect.origin.x + _visibleRect.size.width - 10,_visibleRect.origin.y + 185));
100 _uiLayer->addChild(_loopStatusLabel);
101
102 return true;
103}
104
106{
107 Director::getInstance()->end();
108}
109
111{
112 if (_videoPlayer)
113 {
114 _videoPlayer->setFullScreenEnabled(! _videoPlayer->isFullScreenEnabled());
115 }
116}
117
119{
120 if (_videoPlayer)
121 {
122 _videoPlayer->setKeepAspectRatioEnabled(! _videoPlayer->isKeepAspectRatioEnabled());
123 }
124}
125
127{
128 if (_videoPlayer)
129 {
130 _videoPlayer->setLooping(! _videoPlayer->isLooping());
131 _loopStatusLabel->setString(_videoPlayer->isLooping() ? "(OO)" : "(1)");
132 }
133}
134
135
137{
138 if (_videoPlayer)
139 {
140 _videoPlayer->setFileName("cocosvideo.mp4");
141 _videoPlayer->play();
142 }
143}
144
146{
147 if (_videoPlayer)
148 {
149 _videoPlayer->setURL("http://benchmark.cocos2d-x.org/cocosvideo.mp4");
150 _videoPlayer->play();
151 }
152}
153
155{
156 if (_videoPlayer)
157 {
158 _videoPlayer->pause();
159 }
160}
161
163{
164 if (_videoPlayer)
165 {
166 _videoPlayer->resume();
167 }
168}
169
171{
172 if (_videoPlayer)
173 {
174 _videoPlayer->stop();
175 }
176}
177
179{
180 if (_videoPlayer)
181 {
182 _videoPlayer->setVisible(! _videoPlayer->isVisible());
183 }
184}
185
187{
188 auto centerPos = Vec2(_visibleRect.origin.x + _visibleRect.size.width / 2,_visibleRect.origin.y + _visibleRect.size.height /2);
189
190 auto widgetSize = _widget->getContentSize();
191
192 _videoPlayer = VideoPlayer::create();
193 _videoPlayer->setPosition(centerPos);
194 _videoPlayer->setAnchorPoint(Vec2::ANCHOR_MIDDLE);
195 _videoPlayer->setContentSize(Size(widgetSize.width * 0.4f,widgetSize.height * 0.4f));
196 _uiLayer->addChild(_videoPlayer);
197
198 _videoPlayer->addEventListener(CC_CALLBACK_2(VideoPlayerTest::videoEventCallback, this));
199}
200
202{
203 auto centerPos = Vec2(_visibleRect.origin.x + _visibleRect.size.width / 2,_visibleRect.origin.y + _visibleRect.size.height /2);
204
205 auto hSlider = ui::Slider::create();
206 hSlider->setTouchEnabled(true);
207 hSlider->loadBarTexture("cocosui/sliderTrack.png");
208 hSlider->loadSlidBallTextures("cocosui/sliderThumb.png", "cocosui/sliderThumb.png", "");
209 hSlider->loadProgressBarTexture("cocosui/sliderProgress.png");
210 hSlider->setPosition(Vec2(centerPos.x, _visibleRect.origin.y + _visibleRect.size.height * 0.15f));
211 hSlider->setPercent(50);
212 hSlider->addEventListener(CC_CALLBACK_2(VideoPlayerTest::sliderCallback, this));
213 _uiLayer->addChild(hSlider,0,1);
214
215 auto vSlider = ui::Slider::create();
216 vSlider->setTouchEnabled(true);
217 vSlider->loadBarTexture("cocosui/sliderTrack.png");
218 vSlider->loadSlidBallTextures("cocosui/sliderThumb.png", "cocosui/sliderThumb.png", "");
219 vSlider->loadProgressBarTexture("cocosui/sliderProgress.png");
220 vSlider->setPosition(Vec2(_visibleRect.origin.x + _visibleRect.size.width * 0.15f, centerPos.y));
221 vSlider->setRotation(90);
222 vSlider->setPercent(50);
223 vSlider->addEventListener(CC_CALLBACK_2(VideoPlayerTest::sliderCallback, this));
224 _uiLayer->addChild(vSlider,0,2);
225}
226
227void VideoPlayerTest::sliderCallback(Ref *sender, ui::Slider::EventType eventType)
228{
229 if (eventType == Slider::EventType::ON_PERCENTAGE_CHANGED && _videoPlayer)
230 {
231 Slider* hSlider = (Slider*)this->getChildByTag(1);
232 Slider* vSlider = (Slider*)this->getChildByTag(2);
233
234 auto newPosX = _visibleRect.origin.x + _visibleRect.size.width / 2 + hSlider->getPercent() - 50;
235 auto newPosY = _visibleRect.origin.y + _visibleRect.size.height / 2 + 50 - vSlider->getPercent();
236
237 _videoPlayer->setPosition(Vec2(newPosX,newPosY));
238 }
239}
240
241void VideoPlayerTest::videoEventCallback(Ref* sender, VideoPlayer::EventType eventType)
242{
243 switch (eventType) {
244 case VideoPlayer::EventType::PLAYING:
245 _videoStateLabel->setString("PLAYING");
246 break;
247 case VideoPlayer::EventType::PAUSED:
248 _videoStateLabel->setString("PAUSED");
249 break;
250 case VideoPlayer::EventType::STOPPED:
251 _videoStateLabel->setString("STOPPED");
252 break;
253 case VideoPlayer::EventType::COMPLETED:
254 _videoStateLabel->setString("COMPLETED");
255 break;
256 default:
257 break;
258 }
259}
260
261
262// Simple Video Test
263
265{
266 _videoPlayer = nullptr;
267 _style = cocos2d::ui::VideoPlayer::StyleType::NONE;
268 _userInputEnabled = true;
269
270 _switchUserInputEnabled = nullptr;
271 _switchStyle = nullptr;
272}
273
275{
277 {
278 std::string str = _userInputEnabled ? "< User Input Enabled >" : "< User Input Disabled >";
279 _switchUserInputEnabled->setString(str);
280 }
281
282 if (_switchStyle)
283 {
284 std::string str = " - ";
285 switch(_style)
286 {
287 case cocos2d::ui::VideoPlayer::StyleType::NONE:
288 _switchUserInputEnabled->setVisible(false);
289 str = "< NO Sytle >";
290 break;
291
292 case cocos2d::ui::VideoPlayer::StyleType::DEFAULT:
293 str = "< Default Style >";
294 _switchUserInputEnabled->setVisible(true);
295 break;
296
297 default:
298 break;
299 }
300
301 _switchStyle->setString(str);
302 }
303}
304
306{
307 if ( !UIScene::init() )
308 {
309 return false;
310 }
311
312 _visibleRect = Director::getInstance()->getOpenGLView()->getVisibleRect();
313
314 MenuItemFont::setFontSize(16);
315
316 _switchStyle = MenuItemFont::create("Switch Style", CC_CALLBACK_1(SimpleVideoPlayerTest::switchStyleCallback, this));
317 _switchStyle->setAnchorPoint(Vec2::ANCHOR_BOTTOM_LEFT);
318 _switchStyle->setPosition(Vec2(_visibleRect.origin.x + 10,_visibleRect.origin.y + 50));
319
320 _switchUserInputEnabled = MenuItemFont::create("Enable User Input", CC_CALLBACK_1(SimpleVideoPlayerTest::switchUserInputCallback, this));
321 _switchUserInputEnabled->setAnchorPoint(Vec2::ANCHOR_BOTTOM_LEFT);
322 _switchUserInputEnabled->setPosition(Vec2(_visibleRect.origin.x + 10,_visibleRect.origin.y + 100));
323
324 auto menu = Menu::create(_switchUserInputEnabled,_switchStyle,nullptr);
325 menu->setPosition(Vec2::ZERO);
326 _uiLayer->addChild(menu);
327
328 createVideo();
330
331 return true;
332}
333
335{
336 Director::getInstance()->end();
337
338#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
339 exit(0);
340#endif
341}
342
343
345{
346 switch (_style) {
347 case cocos2d::ui::VideoPlayer::StyleType::NONE:
348 _style = cocos2d::ui::VideoPlayer::StyleType::DEFAULT;
349 break;
350
351 case cocos2d::ui::VideoPlayer::StyleType::DEFAULT:
352 _style = cocos2d::ui::VideoPlayer::StyleType::NONE;
353 break;
354
355 default:
356 break;
357 }
358
359 if (_videoPlayer)
360 {
361 _videoPlayer->setStyle(_style);
362 }
363
364 //createVideo();
366}
367
369{
371 if (_videoPlayer)
372 {
373 _videoPlayer->setUserInputEnabled(_userInputEnabled);
374 }
375
376 //createVideo();
378}
379
380
382{
383 if (_videoPlayer)
384 {
385 _uiLayer->removeChild(_videoPlayer);
386 }
387 auto centerPos = Vec2(_visibleRect.origin.x + _visibleRect.size.width / 2,_visibleRect.origin.y + _visibleRect.size.height /2);
388
389 auto widgetSize = _widget->getContentSize();
390
391 _videoPlayer = VideoPlayer::create();
392 _videoPlayer->setPosition(centerPos);
393 _videoPlayer->setAnchorPoint(Vec2::ANCHOR_MIDDLE);
394 _videoPlayer->setContentSize(Size(widgetSize.width * 0.4f,widgetSize.height * 0.4f));
395 _videoPlayer->setLooping(true);
396 _videoPlayer->setStyle(_style);
397 _videoPlayer->setUserInputEnabled(_userInputEnabled);
398
399 _uiLayer->addChild(_videoPlayer);
400
401 // _videoPlayer->addEventListener(CC_CALLBACK_2(SimpleVideoPlayerTest::videoEventCallback, this));
402
403 _videoPlayer->setFileName("cocosvideo.mp4");
404 _videoPlayer->play();
405}
#define ADD_TEST_CASE(__className__)
Definition: BaseTest.h:211
void menuCloseCallback(cocos2d::Ref *sender)
cocos2d::ui::VideoPlayer::StyleType _style
cocos2d::MenuItemFont * _switchUserInputEnabled
cocos2d::MenuItemFont * _switchStyle
cocos2d::ui::VideoPlayer * _videoPlayer
virtual bool init() override
void switchStyleCallback(cocos2d::Ref *sender)
void switchUserInputCallback(cocos2d::Ref *sender)
cocos2d::Rect _visibleRect
cocos2d::Layer * _uiLayer
Definition: UIScene.h:44
virtual bool init() override
Definition: UIScene.cpp:46
cocos2d::ui::Layout * _widget
Definition: UIScene.h:45
void menuStopCallback(cocos2d::Ref *sender)
void videoEventCallback(cocos2d::Ref *sender, cocos2d::ui::VideoPlayer::EventType eventType)
cocos2d::Rect _visibleRect
cocos2d::ui::VideoPlayer * _videoPlayer
void sliderCallback(cocos2d::Ref *sender, cocos2d::ui::Slider::EventType eventType)
void menuCloseCallback(cocos2d::Ref *sender)
cocos2d::Label * _loopStatusLabel
virtual bool init() override
void menuFullScreenCallback(cocos2d::Ref *sender)
void menuOnlineVideoCallback(cocos2d::Ref *sender)
void menuRatioCallback(cocos2d::Ref *sender)
cocos2d::Label * _videoStateLabel
void menuLoopCallback(cocos2d::Ref *sender)
void menuPauseCallback(cocos2d::Ref *sender)
void menuResumeCallback(cocos2d::Ref *sender)
void menuResourceVideoCallback(cocos2d::Ref *sender)
void menuHintCallback(cocos2d::Ref *sender)