VideoPlayerに出会った問題たち

インデックス

  • ムービーの上にウィジェットを置けない問題

  • ムービー機能のマルチ対応

  • Windowsに対応していない問題

  • ムービーの配置問題

 

一、ムービーの上にウィジェットを置けない問題

 1.ムービーのビューはcocosのビューではなく、System widgetに配置されており、さらにムービービューが常にトップに固定されているため、ZOrderの調整を行っても変更が反映されない。。。(ZOrderの変更はcocosのビューに対して行うもの)

(たまにZOrderを調整すれば動くと書いてるサイトを見かけるが、それは多分間違ってる。。。)

(ビューのトップ固定を解除したら動くかもしれないが。。。試したことないので機会があればやってみる)

 2.AndroidiOSごとに対応が必要

 Androidの場合はUIVideoPlayer_android.cppで、iOSの場合はUIVideoPlayer_iOS.mmを参照しており、それぞれ動かしたいのであれば、どっちも対応する必要がある。

■解決法

iOS

1.新規ルートビューをつかし、動画ビューやcocosビューをそれぞれルートビューに追加する

AppController.mm

_viewController.view.backgroundColor = [UIColor clearColor]

先ずはビューコントローラーの透明度を追加する

UIView* videoView;

次はappController.hに新しいビデオビューを追加する

_viewController.view.tag = 3;    

UIViewController* uiVC = [[UIViewController alloc] initWithNibName:nil bundle:nil];

uiVC.view.frame = [UIScreenmainScreen].bounds;

_videoView = [[UIView alloc]initWithFrame:[[UIScreen mainScreen]bounds] ];

_videoView.tag = 1;

[uiVC.view addSubview : _videoView];

[uiVC.view addSubview : _viewController.view];

 

// Set RootViewController to window

    if ([[UIDevice currentDevice].systemVersion floatValue] < 6.0)

    {

        // warning: addSubView doesn't work on iOS6

        [window addSubview : uiVC.view];

    }

    else

    {

        // use this method on ios6

        [window setRootViewController : uiVC];

    }

 

UIVideoPlayer_ios.mm

2.VideoPlayerのデフォルトビューを新規ルートビューに変更

[[[eaglview superview] viewWithTag:10] addSubView:self.moviePlayer.view];

 

3.エンジンのデフォルトピクセルフォームを変更する

pixelFormat = PixelFormat::RGBA8;

 

Android

1.ムービービューのトップ固定を解除

Cocos2dxVideoHelper.java 

//videoView.setZOrderOnTop(true);

2.ムービービューに透明度を付与

AppActivity.java

  1. glSurfaceView.setEGLConfigChooser(8, 8, 8, 8, 16, 8);
  2.  
    glSurfaceView.getHolder().setFormat(PixelFormat.RGBA_8888);
  3.  
    glSurfaceView.setZOrderMediaOverlay(true);
     

 

二、ムービー機能のマルチ対応

  異なるソースファイルを参照しているため、機能が統一していない。。。

 ・Android

  →画面をクリックして一時停止Or再開

 ・iOS

  →スキップボタン

   ダブルクリックして画面拡大

■解決方法

 VideoPlayerの機能を使用せず、自ら機能を実装する。

1.VideoPlayerのタッチ反応を遮断する

 videoPlayerの基本機能のタッチを反応するかの方を使用する。

2.機能実装

 

三、Windowsに対応していない問題

  VideoPlayerはWindowsに対応していないため、位置の調整とか、画面をフルスクリーンにするかを変更した場合、Windowsでは確認できないので、実機にビルドするしかない。。。(超時間かかる)

 

四、ムービーの配置問題

 フルスクリーンを指定した場合は動画ビューのサイズや位置に関係なく、画面いっぱいに表示されます。

 フルスクリーンを指定しない場合に、ビューの位置を知るためにはGetVisibleOriginを使用してゲットできる。