LoginSignup
0
0

More than 1 year has passed since last update.

AndroidのMediaExtractorで映像・音声のソース確認

Last updated at Posted at 2022-12-29

はじめに

株式会社THIRD IT開発部でモバイル開発チームでアプリ(Android及びiOS)の開発を行なっているエンジニアです。
弊社では不動産の点検や作業報告などをスマートフォンで行うためのアプリとして,管理ロイド等のアプリを開発及びリリースしています。

管理ロイドではマンション等の各種点検業務でビデオデータを添付する事があります。
添付したビデオデータがごく稀に壊れている場合があるためMediaExtractorを使用しメディアデーター内のソースを確認する事としました。

ビデオ撮影について

ビデオ撮影についてはACTION_VIDEO_CAPTUREを使用してカメラアプリに撮影してもらっています。

カメラアプリ呼び出し例

val intent = Intent(MediaStore.ACTION_VIDEO_CAPTURE)
startActivity(intent)

撮影されたビデオデータが問題ないかのチェック

ビデオデータが正しいかどうかを確認するために下記を確認する

  • Videoソース及びAudioソースがある事を確認
  • 各ソースのdurationが0より大きいこと

実装方法

MediaExtractorを使用し、Video及びAudioデーターソースを確認します。

下記がサンプルコードになります。

    fun checkVideoSource(path: String): Boolean {
        val extractor = MediaExtractor()
        extractor.setDataSource(path)
        val trackCount = extractor.trackCount
        if (trackCount < 2) return false

        var audioFormat: MediaFormat? = null
        var videoFormat: MediaFormat? = null
        for (i in 0 until trackCount) {
            val format = extractor.getTrackFormat(i)
            val mime = format.getString(MediaFormat.KEY_MIME)
            if (mime?.startsWith(MIMETYPE_AUDIO) == true) {
                audioFormat = format
            } else if (mime?.startsWith(MIMETYPE_VIDEO) == true) {
                videoFormat = format
            }
        }
        var result = false
        if (audioFormat != null && videoFormat != null) {
            result = (audioFormat.getLong(MediaFormat.KEY_DURATION) > 0L) && (videoFormat.getLong(MediaFormat.KEY_DURATION) > 0L)
        }
        extractor.release()
        return result
    }

まとめ

ACTION_VIDEO_CAPTUREで撮影したデータが壊れていたという事はそうそう発生しないとは思いますが、
後で確認したらデータが壊れていたとなると、再度現場へ行き撮影するのは多大なコストになるため、
撮影後に簡単なチェックをし、問題がある場合には再度撮影してもらうためのアラートを出す事で不足の事態に備えています。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0