Kamcordでcocos2dアプリにプレイ動画共有機能を実装する – 後編

前回の記事ではKamcord SDKを入手して、
実機でサンプルを動かすところまで説明しました。

今回は本番の、自作アプリにKamcordを取り込む部分について説明します。

なお、本記事の内容の動作確認は、下記の2環境にて実施しました。

  • cocos2d 1.0.1+Kamcord 0.9.4
  • cocos2d 2.0+Kamcord 0.9.5


準備

  1. Kamcord SDKのFrameworkをXcodeプロジェクトにドラッグ&ドロップする
    /Frameworks/AWSiOSSDK.framework
    /Frameworks/Kamcord.framework

  2. Framework/Resources配下のファイルを
    XcodeプロジェクトのResoucesにドラッグ&ドロップする
  3. “Build Phases”の”Link Binary with Libraries”に
    下記のフレームワークがあることを確認する
    ※ないものがあれば追加する

    • Accounts
    • AVFoundation
    • AWSiOSSDK
    • CoreData
    • CoreGraphics
    • CoreMedia
    • CoreVideo
    • Foundation
    • Kamcord
    • MediaPlayer
    • MessageUI
    • OpenGLES
    • QuartzCore
    • Security
    • SystemConfiguration
    • Twitter
    • UIKit
  4. 下記のフレームワークを”Required”から”Optional”に変更する
    ※Kamcordが対応していない環境(iOS4以前)でもアプリの動作に影響を与えないようにするため

    • Accounts
    • AVFoundation
    • AWSiOSSDK
    • CoreData
    • MediaPlayer
    • MessageUI
    • Security
    • SystemConfiguration
    • Twitter

  5. “Build Settings”の”Linking”の”Other Linker Flags”に下記を追加する
    • -ObjC
    • -all_load
    • -lxml2


ソースコード

  1. cocos2dアプリのデリゲート(AppDelegate.h)でヘッダファイルをインポートする
    #import <Kamcord/Kamcord.h>
    
  2. デリゲート(AppDelegate.m)を変更する
    cocos2d 1.0.1+Kamcord 0.9.4の場合
    applicationDidFinishLaunching関数を下記のように修正します。

    - (void) applicationDidFinishLaunching:(UIApplication*)application
    {
    window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    
    if( ! [CCDirector setDirectorType:kCCDirectorTypeDisplayLink] )
    	[CCDirector setDirectorType:kCCDirectorTypeDefault];
    
    CCDirector *director = [CCDirector sharedDirector];
    
    【ここに追記する】
    
    viewController = [[RootViewController alloc] initWithNibName:nil bundle:nil];
    viewController.wantsFullScreenLayout = YES;
    
    EAGLView *glView = [EAGLView viewWithFrame:[window bounds]
    							   pixelFormat:kEAGLColorFormatRGB565
    							   depthFormat:0
    					];
    
    [director setOpenGLView:glView];
    
    【中略】
    }
    

    【ここに追記する】部分にて
    前編で紹介したメール記載のDeveloperKeyとSecretとアプリ名を指定します。

    // Set DeveloperKey and Secret for Kamcord
    [Kamcord setDeveloperKey:@"My_Developer_Key"
    developerSecret:@"My_Developer_Secret"
    appName:@"My_Game_Name"];
    

    【ここに追記する】部分にてKamcordの初期設定を指定します。

    // Instantiate a KCGLView, which is a subclass with EAGLView with
    // special recording functionality.
    KCGLView * glView = [KCGLView viewWithFrame:[window bounds]
    pixelFormat:kEAGLColorFormatRGB565
    depthFormat:0];
    
    // Kamcord uses UIKit for autorotation, which requires special logic to handle rotations.
    viewController = [[KCViewController alloc] initWithNibName:nil bundle:nil];
    viewController.view = glView;
    viewController.wantsFullScreenLayout = YES;
    
    // Tell Kamcord about the root view controller and the KCGLView
    [Kamcord setParentViewController:viewController];
    [Kamcord setOpenGLView:glView];
    
    // Set the device orientation. Must use Kamcord, not CCDirector!
    [Kamcord setDeviceOrientation:CCDeviceOrientationPortrait];
    
    

    cocos2dのデリゲート(AppDelegate.m)の不要部分を削除/コメントアウトします。

    // viewController = [[RootViewController alloc] initWithNibName:nil bundle:nil];
    // viewController.wantsFullScreenLayout = YES;
    
    // EAGLView *glView = [EAGLView viewWithFrame:[window bounds]
    // 							   pixelFormat:kEAGLColorFormatRGB565
    // 							   depthFormat:0
    // 					];
    
    【中略】
    
    #if GAME_AUTOROTATION == kGameAutorotationUIViewController
    //	[director setDeviceOrientation:kCCDeviceOrientationPortrait];
    #else
    //	[director setDeviceOrientation:kCCDeviceOrientationPortrait];
    #endif
    
    

    cocos2dのデリゲート(AppDelegate.h)の”*viewController”のクラスを
    “RootViewController”から”UIViewController”に変更します。
    ※この時点でビルド可能となります。

    cocos2d 2.0+Kamcord 0.9.5の場合
    application関数を下記のように修正します。

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {
    // Create the main window
    window_ = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    
    // Instantiate a KCGLView, which is a subclass with CCGLView with
    // special recording functionality.
    KCGLView * glView = [KCGLView viewWithFrame:[window_ bounds]
                                        pixelFormat:kEAGLColorFormatRGB565
                                        depthFormat:0 /* GL_DEPTH_COMPONENT24_OES */
                                 preserveBackbuffer:NO
                                         sharegroup:nil
                                      multiSampling:NO
                                    numberOfSamples:0];
    
    director_ = (CCDirectorIOS*) [CCDirector sharedDirector];
    
    【中略】
    
    // Set DeveloperKey and Secret for Kamcord
    [Kamcord setDeveloperKey:@"My_Developer_Key"
    developerSecret:@"My_Developer_Secret"
    appName:@"My_Game_Name"];
    
    [window_ addSubview:glView];
    
    // make main window visible
    [window_ makeKeyAndVisible];
    
    return YES;
    }
    

    cocos2d 2.0+Kamcord 0.9.5のほうが楽ですね。

  3. 録画開始したい箇所に下記のコードを追加する
    [Kamcord startRecording];
    
  4. 録画停止したい箇所に下記のコードを追加する
    [Kamcord stopRecording];
    
  5. 動画をシェアしたい箇所に下記のコードを追加する
    [Kamcord showView];
    

    showView関数を呼んだタイミングで下記のような画面が表示されます。

上記のソースコードで録画・共有した動画はこちら。

とても簡単にプレイ動画を録画・共有する仕組みを実装できました。
Kamcord、便利ですね。


  1. トラックバックはまだありません。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。