89

私はVideoView使用にロードしようとしている2つの異なるビデオを持っています

videoView.setVideoURI(Uri.parse(url));

ビデオ1ビデオ2の2つのビデオには、次の仕様があります(を使用して抽出ffmpeg -i)。実際、これらは同じビデオの2つの異なるエンコーディングです。

  1. ビデオ1:

    Seems stream 0 codec frame rate differs from container frame rate: 180000.00 (180000/1) -> 90000.00 (180000/2)
    Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '4fbfd5ece4b0932236fc234d.mp4':
      Metadata:
        major_brand     : mp42
        minor_version   : 0
        compatible_brands: mp42isomavc1
        creation_time   : 2011-12-03 04:43:46
        genre           : Trailer
        artist          : Paramount Pictures
        title           : Captain America: The First Avenger - Theatrical Trailer #2
        encoder         : HandBrake 4344svn 2011111001
        date            : 2011
      Duration: 00:02:30.67, start: 0.000000, bitrate: 6738 kb/s
        Stream #0.0(und): Video: h264 (High), yuv420p, 1920x800 [PAR 1:1 DAR 12:5], 6575 kb/s, 23.97 fps, 90k tbr, 90k tbn, 180k tbc
        Metadata:
          creation_time   : 2011-12-03 04:43:46
        Stream #0.1(eng): Audio: aac, 48000 Hz, stereo, s16, 159 kb/s
        Metadata:
          creation_time   : 2011-12-03 04:43:46
    
  2. ビデオ2:

    Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '500416ea44aeb4b95d5ae8a0_hd.mp4':
      Metadata:
        major_brand     : isom
        minor_version   : 512
        compatible_brands: isomiso2avc1mp41
        creation_time   : 2011-12-03 04:43:46
        title           : Captain America: The First Avenger - Theatrical Trailer #2
        artist          : Paramount Pictures
        date            : 2011
        encoder         : Lavf53.32.100
        genre           : Trailer
      Duration: 00:02:30.69, start: 0.000000, bitrate: 2045 kb/s
        Stream #0.0(und): Video: h264 (High), yuv420p, 1280x720 [PAR 27:20 DAR 12:5], 1889 kb/s, 23.99 fps, 90k tbr, 180k tbn, 180k tbc
        Metadata:
          creation_time   : 2011-12-03 04:43:46
        Stream #0.1(eng): Audio: aac, 44100 Hz, stereo, s16, 151 kb/s
        Metadata:
          creation_time   : 2011-12-03 04:43:46
    

AACサポートがHoneycombに付属していることを知っているので、いくつかのデバイスでビデオをテストしました。結果を以下に示します。

  1. SGS II with custom 4.0.3 OS(Sensation ROM 3.4 with CF-Root kernel) - Video 1:OK - Video2:OK
  2. SGS I with Samsung 2.3.3 OS - Video 1:error (1, -2147483648) - Video 2:OK
  3. SGS I with custom 4.0.3 OS(ICS SGS TEAM ROM with Devil kernel) - Video 1:error (1, -2147483648) - Video 2:OK
  4. Nexus One with original 2.3.6 OS - Video 1:See (1) below - Video 2:See (2) below
  5. Emulator with 2.2 OS - Video 1:error (1, -2147483648) - Video 2:error (1, -2147483648)
  6. Emulator with 4.0.3 OS - Video 1:error (1, -2147483648) - Video 2:error (1, -2147483648)

どちらのビデオも、PCのGoogleChromeで正常に再生されます。OKの場合、ビデオとオーディオの両方が正しく再生されることを追加すると便利な場合があります。エラー(1、-2147483648)の場合、すべてのデバイス(Nexus Oneを除く)から同じログが出力されます。

07-18 10:25:10.996: I/MediaPlayer(17860): uri is:http://s3-eu-west-1.amazonaws.com/cf-templates-k6ohn88yswx5-eu-west-1/videos/4fbc88e7e4b0b0896e877764/4fbfd5ece4b0932236fc234d.mp4
07-18 10:25:10.996: I/MediaPlayer(17860): path is null
07-18 10:25:10.996: D/MediaPlayer(17860): Couldn't open file on client side, trying server side
07-18 10:25:39.859: D/MediaPlayer(17860): getMetadata
07-18 10:25:45.070: E/MediaPlayer(17860): error (1, -2147483648)
07-18 10:25:45.074: E/MediaPlayer(17860): Error (1,-2147483648)
07-18 10:25:45.078: D/VideoView(17860): Error: 1,-2147483648

(1)の場合、次のログがNexus Oneから吐き出され、ビデオが読み込まれることはありません。

07-18 13:49:20.115: D/MediaPlayer(10109): Couldn't open file on client side, trying server side
07-18 13:49:20.115: I/StagefrightPlayer(68): setDataSource('http://s3-eu-west-1.amazonaws.com/cf-templates-k6ohn88yswx5-eu-west-1/videos/4fbc88e7e4b0b0896e877764/4fbfd5ece4b0932236fc234d.mp4')
07-18 13:49:20.135: I/NuHTTPDataSource(68): connect to s3-eu-west-1.amazonaws.com:80/cf-templates-k6ohn88yswx5-eu-west-1/videos/4fbc88e7e4b0b0896e877764/4fbfd5ece4b0932236fc234d.mp4 @0
07-18 13:49:20.155: I/ActivityManager(98): Displayed com.woisio/.video.VideoActivity: +450ms
07-18 13:49:20.795: I/NuCachedSource2(68): Keep alive
07-18 13:49:22.185: I/OMXCodec(68): [OMX.qcom.video.decoder.avc] allocating 4 buffers of size 460800 on input port
07-18 13:49:22.195: I/OMXCodec(68): [OMX.qcom.video.decoder.avc] allocating 8 buffers of size 2304000 on output port
07-18 13:49:25.325: D/dalvikvm(9499): GC_EXPLICIT freed 13K, 50% free 2726K/5379K, external 1625K/2137K, paused 116ms
07-18 13:49:27.525: I/NuCachedSource2(68): Keep alive
07-18 13:49:28.235: I/NuCachedSource2(68): Cache full, done prefetching for now
07-18 13:49:30.275: D/dalvikvm(9902): GC_EXPLICIT freed 8K, 50% free 2714K/5379K, external 1625K/2137K, paused 69ms
07-18 13:49:34.255: D/Finsky(9066): [1] 5.onFinished: Installation state replication succeeded.
07-18 13:49:35.855: I/NuCachedSource2(68): Keep alive
07-18 13:49:39.055: D/dalvikvm(9911): GC_EXPLICIT freed 22K, 50% free 2710K/5379K, external 1625K/2137K, paused 38ms
07-18 13:49:42.575: I/NuCachedSource2(68): Keep alive
07-18 13:49:43.285: I/NuCachedSource2(68): Keep alive
07-18 13:49:44.095: D/dalvikvm(9918): GC_EXPLICIT freed 7K, 50% free 2708K/5379K, external 1625K/2137K, paused 66ms
07-18 13:49:49.085: D/dalvikvm(9925): GC_EXPLICIT freed 15K, 49% free 3268K/6407K, external 1625K/2137K, paused 50ms
07-18 13:49:50.925: I/NuCachedSource2(68): Keep alive
07-18 13:49:54.115: D/dalvikvm(6756): GC_EXPLICIT freed 9K, 44% free 3774K/6727K, external 1625K/2137K, paused 77ms
07-18 13:49:57.685: I/NuCachedSource2(68): Keep alive
07-18 13:49:58.375: I/NuCachedSource2(68): Keep alive
07-18 13:49:59.105: D/dalvikvm(9066): GC_EXPLICIT freed 385K, 53% free 3186K/6727K, external 1625K/2137K, paused 66ms
07-18 13:50:05.955: I/NuCachedSource2(68): Keep alive
07-18 13:50:06.045: D/dalvikvm(8047): GC_EXPLICIT freed 9K, 47% free 3830K/7111K, external 1625K/2137K, paused 86ms
07-18 13:50:09.465: I/3gw.Service(488): Mobile Network not connected - not roaming
07-18 13:50:12.765: I/NuCachedSource2(68): Keep alive
07-18 13:50:13.465: I/NuCachedSource2(68): Keep alive
07-18 13:50:18.775: I/WindowManager(98): Setting rotation to 3, animFlags=0
07-18 13:50:18.795: I/ActivityManager(98): Config changed: { scale=1.0 imsi=286/2 loc=en_US touch=3 keys=1/1/2 nav=3/1 orien=2 layout=34 uiMode=17 seq=34}
07-18 13:50:18.895: D/dalvikvm(169): GC_EXTERNAL_ALLOC freed 108K, 48% free 3253K/6215K, external 5172K/5180K, paused 37ms
07-18 13:50:21.005: I/NuCachedSource2(68): Keep alive
07-18 13:50:21.265: D/dalvikvm(98): GC_EXPLICIT freed 394K, 42% free 6631K/11335K, external 4458K/5567K, paused 109ms

(2)の場合、次のログがNexus Oneから吐き出され、ご覧のとおり、エラー(1、-2147483648)で終了します。

07-18 13:47:03.595: D/MediaPlayer(10059): Couldn't open file on client side, trying server side
07-18 13:47:03.595: I/StagefrightPlayer(68): setDataSource('http://s3-eu-west-1.amazonaws.com/cf-templates-k6ohn88yswx5-eu-west-1/videos/4ff4514444aec3d2f9f07ead/500416ea44aeb4b95d5ae8a0_hd.mp4')
07-18 13:47:03.605: I/NuHTTPDataSource(68): connect to s3-eu-west-1.amazonaws.com:80/cf-templates-k6ohn88yswx5-eu-west-1/videos/4ff4514444aec3d2f9f07ead/500416ea44aeb4b95d5ae8a0_hd.mp4 @0
07-18 13:47:03.625: I/ActivityManager(98): Displayed com.woisio/.video.VideoActivity: +505ms
07-18 13:47:05.355: I/OMXCodec(68): [OMX.qcom.video.decoder.avc] allocating 4 buffers of size 460800 on input port
07-18 13:47:05.355: I/OMXCodec(68): [OMX.qcom.video.decoder.avc] allocating 8 buffers of size 1382400 on output port
07-18 13:47:05.365: I/NuCachedSource2(68): Keep alive
07-18 13:47:08.375: D/MediaPlayer(10059): getMetadata
07-18 13:47:08.745: D/dalvikvm(9925): GC_EXPLICIT freed 651K, 49% free 3275K/6407K, external 1625K/2137K, paused 68ms
07-18 13:47:09.205: I/3gw.Service(488): Mobile Network not connected - not roaming
07-18 13:47:11.565: I/NuCachedSource2(68): Cache full, done prefetching for now
07-18 13:47:12.095: I/NuCachedSource2(68): Keep alive
07-18 13:47:14.245: W/QCvdec(68): H264_Utils::check_header 
07-18 13:47:14.245: W/QCvdec(68): check_header: start code 33
07-18 13:47:14.245: W/QCvdec(68): H264_Utils::check_header 
07-18 13:47:14.245: W/QCvdec(68): check_header: start code 10
07-18 13:47:14.245: W/QCvdec(68): Parsing Error unsupported profile or level
07-18 13:47:14.245: W/QCvdec(68): ETB in Invalid State
07-18 13:47:14.245: E/OMXCodec(68): [OMX.qcom.video.decoder.avc] ERROR(0x8000100a, 0)
07-18 13:47:14.245: E/MediaPlayer(10059): error (1, -2147483648)
07-18 13:47:14.285: E/MediaPlayer(10059): Error (1,-2147483648)
07-18 13:47:14.285: D/VideoView(10059): Error: 1,-2147483648

私が読んだところによると、エラー(1、-2147483648)は、サポートされていないコーデック、破損したメタデータ、または誤ったファイルヘッダーに対応している可能性があります。もしそうなら、どのコーデックを使用するかについて正しい方向に私を向けてもらえますか?ありがとう。

4

13 に答える 13

120

タイトルに基づいてこの質問を読んでいる人のために何かを明確にするためだけに。

エラー値(1、-2147483648)を見ると、「1」の値はMediaPlayer.MEDIA_ERROR_UNKNOWNの定数に対応しています。

-2147483648は、frameworks / native / include / utils/Errors.hでUNKNOWN_ERRORとして定義されている16進数の0x80000000に対応します。

これは、エラーのソースが非常に一般的な戻り値であり、前述のコーデックと互換性の問題だけでなく、スレッドのキャンセルや他のいくつかのタイプによってスローされるため、特定するのが難しいことを示しています。

あなたの問題については、互換性のあるAndroidバージョンでAndroidがサポートするメディアフォーマットを調べて、エンコーディングタイプが問題の原因であるかどうかを確認することをお勧めしますが、上記のように、不明なエラーの応答はいくつかの問題によって引き起こされる可能性があります。

于 2013-08-06T15:16:24.513 に答える
32

Android P(Pixel 2 XL)でも同じエラーが発生しましたが、必要なのはアプリケーションタグを付けることだけでしandroid:usesCleartextTraffic="true"AndroidManifest.xml

于 2018-11-15T18:18:57.913 に答える
7

ストリーミングについては、Androidサイトに次の注意事項があります。

3GPPおよびMPEG-4コンテナの場合、moovアトムはmdatアトムの前にある必要がありますが、ftypアトムの後に続く必要があります。

moovアトムを移動する前に同じエラーが発生しました。これを修正するには、次のコマンドでmp4Boxを使用できます。

MP4Box -hint output.mp4 

私のビデオのほとんどはその後ストリーミングできます。それが機能しない場合は、ffmpegでこれを試してください:

ffmpeg -i input.flv -f mp4 -vcodec libx264 -vprofile baseline -acodec libfaac -ar 16k -ab 32k output.mp4
MP4Box -hint output.mp4 

あなたがここで見つけることができる他のツールがあります。

于 2012-11-17T16:56:00.147 に答える
2

ビデオ(rtsp)の再生でも同じMEDIA_ERROR_UNKNOWNエラーの問題が発生します。

私の場合、wifiに問題があります。Wi-FiがRTSPプロトコルに制限されているセキュリティ上の理由がいくつかあります。そのため、このMEDIA_ERROR_UNKNOWNエラーの問題に直面しています。ネットワーク権限を確認したら。

ビデオを再生するためにモバイルデータに移行するとき、それは私にとってはうまく機能しています。これは、同じ種類のエラーに直面している人に役立つかもしれません:)。

于 2014-12-18T14:45:30.273 に答える
2

デバイスのサポートメディアタイプと解像度に注意してください。多くの場合、エラーerror (1, -2147483648)は、ビデオメディアタイプ、コーデック、または解像度がデバイスでサポートされていない場合に表示されます。

ドキュメントでAndroidでサポートされているメディアタイプを確認してください。

https://developer.android.com/guide/appendix/media-formats.html

たとえば、3.0以降のデバイスは.mp4をサポートしていますが、すべてがHD720pをサポートしているわけではありません。

于 2016-06-14T09:04:45.137 に答える
1

同様の問題がありました。私の場合、最初に電話にダウンロードしてから再生すると、ビデオは正常に再生されます。しかし、プログレッシブHTTPを使用しようとすると、OPに記載されているのと同じエラーが発生します。

ftyp、moov、mdatアトムが正しい順序になっていることを確認しました。問題はftypフィールドの値であることが判明しました。'qt'に設定されました。MP4Boxを使用してトラックを抽出し、ftypが「isom」に設定された新しいmp4ファイルを作成しました。この新しいファイルは、プログレッシブHTTPで正常に機能しました。

于 2013-01-07T22:28:19.143 に答える
1

@ nam-trungの回答に記載されている方法と同様にこれを解決しましたが、私のビデオはすでにh264mp4であったため、各ファイルで次の手順を実行するだけで済みました。

ffmpeg -i input.mp4 -vprofile baseline output.mp4

その後、API v19からv25の実行でテストしたすべてのデバイスで実行すると、ビデオはすべてVideoViewで機能しました。

于 2017-04-18T18:48:54.870 に答える
1

オーディオの再生に使用MediaPlayerしている場合、これは私にとってエラーの場合でした。

私が渡した引数を実行するとき.setDataSource()、指定されたファイルへのパスを持つ文字列でした。これにより、特定の理由を見つけることができなかったあらゆる種類の例外が発生します。ただし、 Android Developers-.setDataSource()メソッドFileDescriptorによると、に変更すると、ソートされます。からオブジェクトを 取得しています。 コードは次のとおりです。
FileDescriptorFileInputStream

val player: MediaPlayer = MediaPlayer()
fun playRecording() {
    try {
        replayFileStream = FileInputStream(path)
        val fd = replayFileStream?.fd
        player.setDataSource(fd)
        player.prepareAsync()
        // start should be called from onPreparedListener
     } catch (e: Exception) {
        // catch exceptions
     }
 }

再生の実際の開始は、OnPreparedListenerたとえば次のように処理されます。Android Media Player:状態4のエラー(-38,0)で開始が呼び出されました
リスナーの設定は次のとおりです。

player.setOnPreparedListener(object: MediaPlayer.OnPreparedListener {
    override fun onPrepared(player:MediaPlayer) {
        player.start()
    }
})

于 2021-01-21T08:32:22.180 に答える
0

私の場合、エラーは、メディアプレーヤーがローカルに保存されたビデオに対するファイル権限を持っていないことが原因でした。ビデオを/mnt/sdCARDディレクトリに保存してみてください。

于 2012-09-10T06:15:38.843 に答える
0

私は同じ問題に直面していました、しかし私が私の側でしたことは

まず、メディアプレーヤーを停止してから、リリースしました。

mMediaPlayer.stop(); mMediaPlayer.release();

于 2016-02-08T16:33:53.403 に答える
0

私の場合、URL情報があるWebアドレスにGzip圧縮がありました。圧縮されたメディアファイルは、Androidではデコードされない場合があります。

于 2021-06-20T11:53:16.410 に答える
-1

私の場合、この問題はスペースを含むメディアURLが原因で発生しました。修正は次のとおりです。

mMediaPlayer.setDataSource(source.replaceAll(" ", "%20"));
于 2016-06-20T03:47:53.187 に答える
-1

Firebaseを使用している場合は、パス(またはURL)を1からコピーする必要があります。https://firebasestorage ............を含むURLをダウンロードします。

保管場所からではありません

2: <uses-permission android:name="android.permission.INTERNET" />マニフェストフォルダ内のマニフェストタグにこの権限を追加します

ストレージのルールの内部

ストレージのルールの内部:

rules_version = '2';
service firebase.storage {
match /b/{bucket}/o {
match /{allPaths=**} {
 allow read, write: if true;
  }  
 }  
 }
于 2019-10-31T01:05:01.663 に答える