1

ユーザーがビデオを録画できるようにする Android アプリを作成していますが、ビデオが録画された正確な時刻が必要です。これを使用して、ビデオをデバイス上の他のセンサー情報と照合したいと考えています。

ビデオ カメラを起動するには、ビデオ キャプチャ インテントを使用します。

private long intentTimestamp;

private void dispatchTakeVideoIntent() {
    intentTimestamp = System.currentTimeMillis();
    Intent takeVideoIntent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
    startActivityForResult(takeVideoIntent, ACTION_TAKE_VIDEO);
}

ビデオカメラから戻ったとき:

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    switch (requestCode) {
    case ACTION_TAKE_VIDEO:
        if (resultCode == Activity.RESULT_OK) {

            // Get last recorded video from Gallery
            String date = getLastVideo();
            Log.d(TAG, "# onActivityResult: " + date);

            Toast.makeText(this, "Start intent: " + intentTimestamp
                    + ", video timestamp: " + date
                    + ". Difference: " + ((Long.parseLong(date) - intentTimestamp) / 1000) + "s",
                    Toast.LENGTH_LONG).show();

        } else if (resultCode == Activity.RESULT_CANCELED) {
            Log.d(TAG, "# onActivityResult: Cancelled");
        } else {
            Log.d(TAG, "# onActivityResult: Video capture failed");
        }
    }

}

ビデオが撮影された日付を返す関数を呼び出します。

private String getLastVideo() {
    final Uri videoUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
    final String[] videoColumns = {
            MediaStore.Video.VideoColumns.DATE_TAKEN
        };
    final String videoOrderBy = MediaStore.Video.Media._ID + " DESC";

    Cursor videoCursor = getContentResolver().query(videoUri, videoColumns, null, null, videoOrderBy);

    if (videoCursor != null) {
        if (videoCursor.moveToFirst()) {
            int dateColumn = videoCursor.getColumnIndex(MediaStore.Video.VideoColumns.DATE_TAKEN);
            return videoCursor.getString(dateColumn);
        } else {
            Log.d(TAG, "# getLastVideo - videoCursor.moveToFirst() == false");
        }
    } else {
        Log.d(TAG, "# getLastVideo - videoCursor == null");
    }

    videoCursor.close();

    return null;
}

これは、android MediaStore を使用して撮影日を取得します(1970 年 1 月 1 日以降、ビデオがミリ秒単位で撮影された日付と時刻)。

現在テスト中の HTC One が 2 台あります。1 つは標準の HTC rom がインストールされており、もう 1 つは Google Edition rom がインストールされています。GE rom では、撮影された日付は、私がビデオの録画を開始した時刻に対応しているようです。ただし、HTC rom では、撮影した日付は記録を終了した時刻に対応しています。

MediaStore からビデオの長さを取得できます。これを使用して HTC rom 値を修正できますが、これをすべての Android デバイスで体系的に行うにはどうすればよいでしょうか? 一貫したビデオの日付 (開始または終了) を取得できる場所は他にありますか? カメラの制御など、アプリでカメラを直接制御する必要がありますか?

4

0 に答える 0