Skip to content

Android implement LobiRecSDK Cocos2d x

ueda edited this page Nov 2, 2016 · 30 revisions

Android Cocos2d-x Lobi Rec SDK 導入手順書


RecSDK導入に関してお困りのことがありましたら、 お気軽にお問い合わせください。 すべてのメールに回答いたします。

お問い合わせ先:info@lobi.co


事前にお読みください

Android版の留意点

  • 初期設定では録画を無効にし、ユーザ操作によって有効・無効が切り替えられるようにしてください。
  • 端末が録画機能に対応しているかを取得(後述のbool LobiAndroidRec::isSupported()を利用)し、 対応しない場合はユーザが録画機能を有効にできないようにしてください。
  • 端末が録画機能に対応しているかのフラグは保存せず、 常にbool LobiAndroidRec::isSupported()を用いて取得してください。
  • 動作確認端末の一覧
  • Android 7.0以上の端末での録画には、バージョン8.9.2以上のLobiアプリに含まれる録画機能サービス(以下、LobiRecorderサービスと呼びます)を使用します。
    • LobiRecorderサービスを使用するためには、ゲーム中に別途処理を追加する必要があります。
    • LobiRecorderサービスは、Android 7.0以上のすべての端末に対応しています。
    • LobiRecorderサービスによる録画では、Android 7.0未満で使用される録画機能と以下の点で異なります。ご了承ください。
      • ゲーム映像でなく、端末の画面の映像を録画します(ステータスバーや通知、コントロールボタンが映像に含まれるようになります)。
      • マイク音声も必ず録音されます。
      • ワイプ機能には対応していません。

Cocos2d-x 導入準備

LobiRecSDKではAndroidアプリにゲーム実況録画機能を提供します。

  • 対応OS: Android 4.1 またはそれ以降のバージョン
  • 最小動作OS: Android 2.2(録画はできません)
  • 対応Cocos2dx : 2.2.x, 3.x
  • 動作確認端末 : 一覧
  • 事前に用意いただくファイル・情報
    • LobiRecSDK
    • Client ID

LobiRecSDK構成

LobiRecSDKはLobiSDKに含まれています。

以下のファイル群で構成されています。

Android ライブラリプロジェクト

  • Android/LobiCore
  • Android/LobiRec

Cocos2dx カスタマイズファイル

Android/LobiRec/cocos2dx/java/各バージョン番号

  • Cocos2dxMusic.java (SimpleAudioEngine用)
  • Cocos2dxSound.java (SimpleAudioEngine用)
  • Cocos2dxRenderer.java
  • Cocos2dxGLSurfaceView.java

Android/LobiRec/cocos2dx/cpp

  • LobiRec/LobiAndroidRec.cpp
  • LobiRec/LobiAndroidRec.h
  • LobiInterface.cpp
  • LobiInterface.h
  • AudioEngine/AudioEngine-inl.cpp
  • AudioEngine/AudioEngine-inl.h
  • AudioEngine/LobiAudioEngine.cpp
  • AudioEngine/LobiAudioEngine.h

Client ID

Lobi SDKを利用するには、クライアントIDを用意する必要があります。 クライアントIDは開発者向けページにて取得することができます。 詳しくはLobi SDK導入までのフローを参照してください。

Cocos2d-x への導入

Cocos2d-xライブラリプロジェクトのファイルを上書き

http://www.cocos2d-x.org/downloadから取得したCocos2d-xに対して、

  • v2.2.xの場合 <COCOS2DX_LIBRARY_ROOT>/cocos2dx/platform/android/java/src/org/cocos2dx/lib
  • v3.0の場合 <COCOS2DX_LIBRARY_ROOT>/cocos/2d/platform/android/java/src/org/cocos2dx/lib
  • v3.1以降の場合 <COCOS2DX_LIBRARY_ROOT>/cocos/platform/android/java/src/org/cocos2dx/lib

内の以下の4ファイル

  • Cocos2dxMusic.java (SimpleAudioEngine用)
  • Cocos2dxSound.java (SimpleAudioEngine用)
  • Cocos2dxRenderer.java
  • Cocos2dxGLSurfaceView.java

Android/LobiRec/cocos2dx/java/Cocos2d-xのバージョン

内の同名4ファイルで上書きしてください。

なお、上記の上書き作業を行ったCocos2d-x v2.2のライブラリプロジェクトは、以下に同梱されています。 Android/cocos2d-x/platform/android/java

Eclipseへのインポート

Eclipseに以下の4プロジェクトをインポートしてください。

  • LobiCore
  • LobiRec
  • 上書き処理を行ったCococs2d-xライブラリプロジェクト
  • ゲームのAndroidプロジェクト

ライブラリプロジェクトの参照関係は以下のように設定してください。

  • ゲームのAndroidプロジェクト から Cocos2d-xライブラリプロジェクト へ
  • Cocos2d-xライブラリプロジェクト から LobiRec へ
  • LobiRec から LobiCore へ

参照関係を追加するには、 参照元プロジェクトのプロパティを開き、Android > Library > Reference > Add... から 参照先プロジェクトを選択してください。

プログラムの実装 - Lobi SDK初期化処理

LobiRecSDK用ファイルの追加

Android/LobiRec/cocos2dx/cpp 内の以下の4ファイル

  • LobiRec/LobiAndroidRec.cpp
  • LobiRec/LobiAndroidRec.h
  • LobiInterface.cpp
  • LobiInterface.h

<COCOS2DX_PROJECT_ROOT>/Classes 以下に配置してください。

そして、 <COCOS2DX_PROJECT_ROOT>/proj.android/jni/Android.mk に以下を追記してください。

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := game_shared

LOCAL_MODULE_FILENAME := libgame

LOCAL_SRC_FILES := hellocpp/main.cpp \
                   ...

# LobiRecSDKで使用するために追加
LOCAL_SRC_FILES += ../../Classes/LobiRec/LobiAndroidRec.cpp ../../Classes/LobiInterface.cpp

LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../Classes

LOCAL_WHOLE_STATIC_LIBRARIES := cocos2dx_static cocosdenshion_static

include $(BUILD_SHARED_LIBRARY)

$(call import-module,CocosDenshion/android)
$(call import-module,cocos2dx)

<COCOS2DX_PROJECT_ROOT>/proj.android/jni/Application.mk に以下を追記してください。

# ARMv7-A, x86向けにもビルドする
APP_ABI := armeabi armeabi-v7a x86

SimpleAudioEngine、AudioEngine音声に対応させる(Cocos2d-x 3.3以降)

Cocos2d-x 3.3以降のSimpleAudioEngineAudioEngineによる音声に対応する場合、 <COCOS2DX_PROJECT_ROOT>/cocos2d/cocos/audio/androidディレクトリ内で、次を行ってください。

  • LobiAudioEngine.cpp
  • LobiAudioEngine.h

の2ファイルを、Android/LobiRec/cocos2dx/cpp/AudioEngine内の同名ファイルで上書きしてください。

Android/LobiRec/cocos2dx/cpp/AudioEngine内の以下の2ファイルを追加してください。

  • AudioEngine/LobiAudioEngine.cpp
  • AudioEngine/LobiAudioEngine.h

また、android.mk内のaudioengine_staticモジュールのLOCAL_SRC_FILESLobiAueioEngine.cppを追加してください。

...

LOCAL_MODULE := audioengine_static

LOCAL_MODULE_FILENAME := libaudioengine

LOCAL_SRC_FILES := AudioEngine-inl.cpp \
                   ../AudioEngine.cpp \
                   LobiAudioEngine.cpp

...

AndroidManifest.xmlの修正

ネイティブアプリに組み込む場合 と同様にして、AndroidManifest.xmlに必要な項目を追加してください。

プログラムの実装 - 録画処理

  • 録画機能のサポートチェック処理
  • 録画準備処理(Android 7.0以上に対応する場合)
  • 録画開始処理
  • 録画終了処理
  • 状態の取得

クラス構成

  • LobiRec/LobiAndroidRec : LobiRecSDKのJavaメソッドをラップするクラス。編集する必要はありません。
  • LobiInterface : LobiAndroidRecを使うインタフェースクラス。サンプルとして実装してありますので、編集してお使いいただけます。ヘッダファイルLobiInterface.hはiOSと共通です。

録画機能のサポートチェック処理

録画機能がサポートされるかのチェックを行います。 Android 7.0以上の端末では、LobiRecorderサービスを含むLobiアプリが端末にインストールされているかをチェックします。

NOTE サポートされていない端末でも、リプレイ動画一覧画面を開くことができます。

bool LobiAndroidRec::isSupported();

Android 7.0未満の端末では、録画機能をサポートするかどうかは端末のスペックに依存します。 対応状況

本SDKは必要に応じて通信を行い、最新のサポート状況を反映します。 この反映処理はアプリ起動時に非同期で行われ、 反映処理が終了するまでは、この関数は常にfalseを返します。

録画準備処理(Android 7.0以上に対応する場合)

Android 7.0以上の端末での録画は、Lobiアプリに含まれるLobiRecorderサービスを用います。 LobiRecorderサービスを使用するには、録画開始前に以下のコードを呼ぶ必要があります。

void LobiAndroidRec::prepare()

このメソッドにより、Lobiアプリの録画準備画面が開き、以下を行います。

  • 録画に必要な端末のパーミッション(WRITE_EXTERNAL_STORAGERECORD_AUDIO)の取得要求
  • 録画に必要なAndroid osの画面キャプチャー機能の使用の要求

上記2点の処理が成功した場合、

void LobiAndroidRec::isPrepareRecording()

trueを返すようになり、録画処理が可能になります。

この録画処理が可能な状態は、

  • アプリが終了する
  • LobiAndroidRec::reset()を呼ぶ
  • 録画処理でエラーが発生する

などが起こると終了します。

そのため以下のように、録画開始前には録画準備が完了している状態か判定し、 まだ準備が完了していないときは録画準備画面を開くようにしてください。

if (!LobiAndroidRec::isPrepareRecording()) {
    LobiAndroidRec::prepare();
}

録画開始処理

ゲーム録画は任意のタイミングで行えます。録画の開始をする場合はLobiAndroidRec::startCapturing()を呼びます。 録画開始までに以下の録画設定を行うことができます(Android 7.0以上では対応していません)。

  • LobiAndroidRec::setMicEnable(bool enabled) 録画中のマイク入力可否を設定します。
  • LobiAndroidRec::setMicVolume(double volume) 録画中のマイク入力ボリュームの大きさを設定します。(0.0以上。推奨2.0程度)
  • LobiAndroidRec::setGameSoundVolume(double volume) 録画中のゲームボリュームの大きさを設定します。(0.0 - 1.0)
  • LobiAndroidRec::setCapturePerFrame(int frames) 何フレームに1回キャプチャするかを設定します。より大きな値にすることで録画処理の負荷が小さくなります。
  • LobiAndroidRec::setLiveWipeStatus(LobiAndroidRec::LiveWipeStatus status) 録画中に表示するワイプの状態を設定します。
  • LobiAndroidRec::setWipePosition(int x, int y) 録画中に表示するワイプの位置を指定します。
  • LobiAndroidRec::setWipeSquareSize(int wipeSize) 録画中に表示するワイプの大きさを指定します。

なお、上記以外のiOS版に実装されている機能は、現在Android版ではサポートされません。

ゲーム開始処理の実装例はLobiInterface::recStart()にあります。 用途に応じて書き換えてご利用ください。

組み込み例

#include "LobiInterface.h"
...

LobiInterface::recStart();

録画終了処理

録画の終了をする場合はLobiAndroidRec::stopCapturing()を呼びます。

組み込み例

#include "LobiInterface.h"
...

LobiInterface::recStop();

状態の取得

  • bool LobiAndroidRec::hasMovie() 未送信の録画ファイルがあるかどうかを返します。
  • bool LobiAndroidRec::isCapturing() 録画中かどうかを返します。

LobiRecorderサービスを終了する(Android 7.0以上に対応する場合)

録画を頻繁に行わない場合、録画終了後に以下のメソッドを使用し、LobiRecorderサービスをリセットしてください。

void LobiAndroidRec::reset()

LobiAndroidRec::prepare()を行うことで、再び録画処理が可能になります。 また、動画投稿はreset()後でも可能です。

reset()により、Android osの画面キャプチャー機能の解放や、LobiRecorderサービスの終了処理を行います。

プログラムの実装 - プレイ動画シェア画面

プレイ動画シェア画面

組み込み例

#include "LobiInterface.h"
...

LobiInterface::presentShare();

プログラムの実装 - リプレイ動画一覧画面

リプレイ動画一覧画面

組み込み例

#include "LobiInterface.h"
...

LobiInterface::presentLobiPlay();

プログラムの実装 - 通知のハンドリング

通知のハンドリング

LobiRecSDKでは以下のイベント発生時にBroadcast Intentの送信を行います。 適宜通知を受け取った際に処理してください。

  • com.kayac.lobi.libnakamap.rec.LobiRec.ACTION_MOVIE_CREATED プレイ動画情報をサーバにPOSTした際に、Extraにcom.kayac.lobi.libnakamap.rec.LobiRec.EXTRA_MOVIE_CREATED_URLをキーとした、投稿動画情報を格納して通知する通知名称です。動画情報は以下のようなjson形式です。
{
    "url": "https://play.lobi.co/video/hogehoge",
    "videoId": "hogehoge"
}
  • com.kayac.lobi.libnakamap.rec.LobiRec.ACTION_MOVIE_CREATED_ERROR プレイ動画情報をサーバにPOST中にエラーが発生した際に通知する通知名称です。

  • com.kayac.lobi.libnakamap.rec.LobiRec.ACTION_MOVIE_UPLOADED プレイ動画ファイルをサーバにPOSTした際に通知する通知名称です。

  • com.kayac.lobi.libnakamap.rec.LobiRec.ACTION_MOVIE_UPLOADED_ERROR プレイ動画ファイルをサーバにPOST中にエラーが発生した際に通知する通知名称です。

  • com.kayac.lobi.libnakamap.rec.LobiRec.ACTION_FINISH_POST_VIDEO_ACTIVITY プレイ動画シェア画面(com.kayac.lobi.sdk.rec.activity.RecPostVideoActivity)を閉じた際に,EXTRA_FINISH_POST_VIDEO_ACTIVITY_TRY_POSTに投稿画面の状態・投稿を試みたかの情報を格納して通知する通知名称です。以下のようなjson形式で格納されます。

{
    // 動画投稿を試みたかどうか (1:true / 0:false)
    "try_post": 1,

    // 各SNSシェアがONになっていたかどうか (1:true / 0:false)
    "twitter_share": 1,
    "facebook_share": 0,
    "youtube_share": 0,
    "nicovideo_share": 0
}

プログラムの実装 - カテゴリについて

動画のカテゴリ機能を使うと、ゲーム側で定義したカテゴリを使って動画を整理することができます。

たとえば、ゲームに登場するステージをカテゴリとして使えば、

カテゴリを設定するには、まずデベロッパーサイトから、「REC機能」の「カテゴリ追加」を選んでください。このページでカテゴリ名・カテゴリID・スコアの設定などを入力して、カテゴリを定義できます。

カテゴリ名がplay.lobi.coで表示される名前、カテゴリIDが動画投稿時に指定するもの(LobiAndroidRec.presentLobiPostWithTitleの第4引数)になります。

またステージが大量にあるゲームの場合は、このカテゴリ追加を1つずつ行うのも難しいと思いますので、カテゴリのデータをCSVにしてまとめて流し込む機能も用意しています。(デベロッパーサイトの「REC機能」→「REC カテゴリ CSV取り込み」)

プログラムの実装 - メタ情報について

プレイ動画投稿の際、プレイ時のさまざまな情報を付与して、検索に使うことができます。

詳しくは、Lobi Rec 動画メタ情報機能についてをご覧ください。

FAQ

Multiple dex files define エラーが発生し、apkを作成できない

apkを作成しようとした際に以下のエラーが発生する

[xxxx-xx-xx xx:xx:xx - Dex Loader] Unable to execute dex: Multiple dex files define Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompat$AccessibilityServiceInfoVersionImpl;
[xxxx-xx-xx xx:xx:xx - xxxxxxxxxx] Conversion to Dalvik format failed: Unable to execute dex: Multiple dex files define Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompat$AccessibilityServiceInfoVersionImpl;

android-support-v4.jarが重複しています。 Android/LobiCore/libs/android-support-v4.jarを削除後、再度apkを作成してください

ビルド後にLobiRec関連のActivityへ遷移すると強制終了する場合は、重複していたandroid-support-v4.jarが古いことが考えられます。 android-support-v4.jarを最新のものにアップデートしてください。

http://developer.android.com/tools/support-library/setup.html

メソッド数がオーバーし、apkを作成できない

apkを作成しようとした際に以下のエラーが発生する

trouble writing output: Too many method references: xxxxx; max is 65536.
You may try using --multi-dex option.
References by package:

Javaメソッド数が制限をオーバーしています。 Ranking機能を用いない場合、 LobiRanking は不要ですのでEclipseにインポートしないでください。 その他にも用いていないライブラリがある場合は削除してください。

それでも関数の数がオーバーしてしまう場合、LobiRecのライブラリファイルの一部を削除してください。 LobiRec/libs にある以下の2ファイルが削除できます。

  • aspectjrt-1.7.3.jar
  • isoparser-1.0.2.jar

(削除する場合は、 LobiAndroidRec.hsetStickyRecording(bool) という関数は用いないでください)

ニコニコ動画へのシェアを有効にしたい

よくある質問をご覧ください。

v3でのAndroid SimpleAudioEngineのサポートはしているか

はい。ただし、SEのPitch、Pan、Gainには未対応です。

ワイプの有効/無効を切り替えたい

ワイプ機能は次のようにして切り替えられます。

  • LobiAndroidRec::setLiveWipeStatus(LobiAndroidRec::LIVE_WIPE_STATUS_NONE); ワイプを無効にする。

  • LobiAndroidRec::setLiveWipeStatus(LobiAndroidRec::LIVE_WIPE_STATUS_IN_CAMERA); フロントカメラの映像を表示するワイプを有効にする。

  • LobiAndroidRec::setLiveWipeStatus(LobiAndroidRec::LIVE_WIPE_STATUS_ICON); Rec SDKのユーザーのアイコンを表示するワイプを有効にする。

フロントカメラを用いたワイプ機能がサポートされており(LobiAndroidRec::isFaceCaptureSupported()true)、カメラ映像を使用したワイプを有効にしているにも関わらず、アイコンのワイプが表示される場合、アプリがフロントカメラの取得に失敗していることが考えられます。

LobiRecorderサービスが使用される場合、されない場合で処理を分けたい

Android 7.0以上の端末の場合、LobiRecorderサービスが使用されます。 LobiRecorderサービスが使用されるかはLobiAndroidRec::shouldUseRecAfterNougat()によっても取得できます。

NoteshouldUseRecAfterNougat()は、使用されている端末がAndroid 7.0以上であるかどうかのみチェックしています。 LobiRecorderサービスが使用可能であるかは下記を参照ください。

LobiRecorderサービスが使用できるLobiアプリが端末にインストールされているか確認したい

Android 7.0以上の端末の場合、LobiAndroidRec::isSupported()で判定できます (Android 7.0未満の場合では、IsSupported()は、端末が録画機能に対応しているかを判定します)。

録画機能を有効にするため、Lobiアプリのインストールを促したい場合、LobiAndroidRec::showDownloadLobiDialog()をご使用ください。 以下のダイアログが表示されます。

ダウンロードボタンが押された場合、PlayストアのLobiダウンロードページへ移動します。

以下のようにご使用ください。

// 録画を使用するボタンが押された場合
if (LobiAndroidRec::isSupported()) {
    LobiAndroidRec::prepare();
} else {
    LobiAndroidRec::showDownloadLobiDialog();
}

Clone this wiki locally