マイクやカメラを使って音声・写真・ビデオデータを取得するプラグインを使う
Apache Cordovaで本格スマホアプリに挑戦しよう 第9回
ダウンロード サンプルファイル (440.4 KB)
マイク・カメラの音声、映像をキャプチャーするプラグイン(2)
サンプルアプリ
図5はMediaCaptureプラグインを使ったサンプルアプリのキャプチャー画像です。サンプルアプリでは、各メディアのキャプチャーに成功すると、キャプチャーしたファイルの情報を表示します。
また、リスト4は実際のプラグインのAPIを使った部分のサンプルコードです。
function MediaCaptureController($scope){
//(1)メディア取得成功時のコールバック
function captureSuccess(mediaFiles){
var size = mediaFiles.length;
for(var i = 0; i < size; i++){
var file = mediaFiles[i];
console.log(file.name);
}
// AngularJSのテンプレート側にファイル詳細を表示
$scope.$apply(function(){
$scope.files = mediaFiles;
});
};
//(2)メディア取得失敗時のコールバック関数
function captureError(error){
if(error.code == CaptureError.CAPTURE_NO_MEDIA_FILES){
window.alert("ユーザによりキャンセルされました");
}
else {
window.alert('Error code: ' + error.code + " - " + error.message);
}
};
$scope.captureAudio = function(){
//(3)録音アプリ(UI)の起動
navigator.device.capture.captureAudio(captureSuccess, captureError, {limit:1});
};
$scope.captureImage = function(){
//(4)写真取得アプリ(UI)の起動
navigator.device.capture.captureImage(captureSuccess, captureError, {limit:2});
}
$scope.captureVideo = function(){
//(5)ビデオ取得アプリ(UI)の起動
navigator.device.capture.captureVideo(captureSuccess, captureError, {limit:1});
};
};
(1)ではキャプチャーしたファイルを取得するためのロールバック関数の定義処理です。取得できるファイルは1つとは限らないために表4に示すプロパティを保持するオブジェクトの配列として取得できます。ファイルのアップロードやHTML側で再生やプレビューなどをするには、localURLを使ってファイルにアクセスが可能です。
| 変数 | 説明 |
|---|---|
| name | 保存したファイル名(パスは含まない) |
| fullPath | パスを含んだファイル名 |
| localURL | cdvfileプロトコルを用いたパス |
| type | MIMEタイプ |
| lastModifiedDate | 最終更新日 |
| size | ファイルサイズ |
(2)ではメディアデータの取得に失敗した場合のコールバック関数で、コールバック関数の引数を使ってエラー原因が取得できます。表5に示すプロパティが取得できます。
| 変数 | 説明 |
|---|---|
| code | エラーコード。エラー定数で定義された数値 |
| message | エラー時のメッセージ |
また、エラーコードは、表6で示すエラーが定義されていますので、エラーコードで評価する場合には、これらの定数と使うことをおすすめします。
| 定数 | 説明 |
|---|---|
| CaptureError.CAPTURE_INTERNAL_ERR | 内部エラー |
| CaptureError.CAPTURE_APPLICATION_BUSY | 他のアプリケーションがキャプチャーする為のリソースを使っているなどのエラー |
| CaptureError.CAPTURE_INVALID_ARGUMENT | メソッド起動時のoptions指定の間違い |
| CaptureError.CAPTURE_NO_MEDIA_FILES | ユーザのキャンセルなどによるデータなしエラー |
| CaptureError.CAPTURE_PERMISSION_DENIED | ユーザ操作によるキャプチャー要求の拒否 |
| CaptureError.CAPTURE_NOT_SUPPORTED | キャプチャー機能がサポートされていない場合のエラー |
(3)では録音アプリ(UI)を起動しています。録音時には表7のプロパティが指定できます。
| プロパティ名 | 説明 |
|---|---|
| limit | 取得するオーディオファイルの最大数。デフォルトでは1。(iOSでは利用不可) |
| duration | 録音する最大秒数(Androidでは利用不可) |
(4)では写真取得アプリ(UI)を起動しています。写真取得時には表8のプロパティが指定できます。
| プロパティ名 | 説明 |
|---|---|
| limit | 取得するオーディオファイルの最大数。デフォルトでは1。(iOSでは利用不可) |
(5)ではビデオ取得アプリ(UI)を起動しています。ビデオ時には表9のプロパティが指定できます。
| プロパティ名 | 説明 |
|---|---|
| limit | 取得するオーディオファイルの最大数。デフォルトでは1(iOSでは利用不可)。 |
| duration | 記録できる最大秒数 |
| quality | 記録する際の画質。1(デフォルト)では高画質で、0では低画質になる(iOSでは利用不可)。 |
最後に
前回と今回でMediaプラグインを使ったオーディオファイルの再生、録画、そして、MediaCaptureプラグインを使ってオーディオ、画像、ビデオをキャプチャーする方法を紹介しました。
Cordovaでの開発では主にWebView上で実行するためのJavaScriptを記述するため、カメラ映像を確認しながらの操作が必要なメディア関連のAPIを利用する機能は苦手な領域です。そのため、これらのデータを取得するには一度WebViewから出てしまい、別のアプリもしくはUI(ActivityやViewController)を使ってデータを取得する必要があります。
これらの方法はWebViewを使ってどうしても実現できない機能を実装する場合にもよく利用されます。実際にそのような問題にぶつかり、自作プラグインで解決しなければいけなくなったときには、MediaCaptureプラグインのソースは参考になります。
そのような異なった視点からも、MediaCaptureプラグインは非常に有益なので、これらの機能を使わなくても一度、どのような流れで処理が行われるかを確認するだけでも大変参考になるでしょう。
参考資料
この記事は参考になりましたか?
既に会員の方はを行ってください。
- Apache Cordovaで本格スマホアプリに挑戦しよう連載記事一覧
- この記事の著者
-
WINGSプロジェクト 小林 昌弘(コバヤシ マサヒロ)
< WINGSプロジェクト について> 有限会社 WINGSプロジェクト が運営する、テクニカル執筆コミュニティ(代表 ...
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
-
山田 祥寛(ヤマダ ヨシヒロ)
静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア
