web-dev-qa-db-ja.com

Android VideoView-"ビデオを再生できません"の奇妙な動作

私のアプリケーションでは、選択したビデオのファイルパスを渡すことにより、異なるアクティビティのVideoViewでsdcardフォルダーからビデオを表示するか、Video intentから新しく撮影したビデオを表示します。

問題は、このアプリを2つのデバイスLG Optimus Black and LG Optimus Me and it worksでテストしたところです。

現在、このアプリをSamsung Fascinate 2.1 the video view shows the message "Can't Play Video"でテストするとき、既存のビデオを選択するか、新しいビデオを選択します。

アプリは上記の2つのデバイスで正常に動作していることを忘れないでください。

ShowVideoアクティビティには、ビデオをアップロードするためのボタンがあります。「ビデオを再生できません」というメッセージが表示されたら、同じパスからビデオを取得してアップロードし、それを確認できますサーバー側のビデオですが、ビデオビューはそのビデオを再生しませんでした。

So, the Video Path of the SDCard is not the problem thats for sure.

also the Video are of .3gp or .mp4 format only so the format is also supported by Android

私の質問は:

1)「ビデオを再生できません」というメッセージが表示された場合2)そのための解決策は何ですか?および3)私のアプリケーションで起こりうる間違いは何ですか?

ここに私がそのメッセージを受け取ったときのlogcatの出力がありますが、エラー/例外は表示されません.

I/ActivityManager( 2227): Starting activity: Intent { cmp=com.zoodigapp.zoodig/com.zoodigapp.media.ShowVideo (has extras) }
V/SettingsProvider( 2227): system <- value=1.0 name=font_scale
V/SettingsProvider( 2227): property: sys.settings_system_version=26
V/SettingsProvider( 2227): notifying: content://settings/system/font_scale
D/HardwareService( 2227): Brightness NATIVE setBacklightBrightness running. light: 2bightness ==> 30  mode:  1
D/NetworkLocationProvider( 2227): onDataConnectionStateChanged 6
D/MobileDataStateTracker( 2227): default Received state= CONNECTING, old= CONNECTING, reason= (unspecified), apnTypeList= *
D/AGPSManagerService( 2227): state: CONNECTING apnName: Verizon reason: null
D/dalvikvm( 3326): GC freed 2472 objects / 140504 bytes in 73ms
I/File    ( 3326): /sdcard/DCIM/Camera/video-2011-10-17-10-40-54.mp4
V/MediaStore( 3326): We probably run out of space, so create the thumbnail in memory.
I/MediaPlayerService( 2182): Use PV_PLAYER for url:/sdcard/DCIM/Camera/video-2011-10-17-10-40-54.mp4
E/MetadataDriver( 2182): MetadataDriver::setDataSource url file type is isAudiofile(0)
D/        ( 2182): SISO TEST registering PVMFRecognizerPluginFactory
D/        ( 2182): SISO TEST registering PVMFRecognizerPluginFactory success
E/MetadataDriver( 2182): isCommandSuccessful: Command id(0 and expected 0) and status (-17 and expected 1), data corruption (false) at state (4).
E/MetadataDriver( 2182): isCommandSuccessful: Command id(1 and expected 1) and status (-14 and expected 1), data corruption (false) at state (5).
E/MetadataDriver( 2182): captureFrame :  time = 0
E/MetadataDriver( 2182): captureFrame :  inputWidth = 0, inputHeight =0, bAspectratio=0, bResize=0
D/MediaUploader( 2492): UploadsQueue.getAllPending: elapsed msec=449
I/MediaUploader( 2492): UploadManager.uploadPendingItems: Found 1 items in queue.
I/Selected( 3326): =============Second
D/MediaUploader( 2492): isGphotosSynced: FALSE -- starting gphotos update refresh for -5709461173740324808
W/IInputConnectionWrapper( 3505): showStatusIcon on inactive InputConnection
I/copybit ( 2227): [createPP] fimc version : 50
I/MediaPlayerService( 2182): Use PV_PLAYER for url:/DCIM/Camera/video-2011-10-17-10-40-54.mp4
D/        ( 2182): SISO TEST registering PVMFRecognizerPluginFactory
D/        ( 2182): SISO TEST registering PVMFRecognizerPluginFactory success
D/        ( 2182): SISO TEST PVOMA1FFRecognizerFactory::CreateRecognizerPlugin()
D/        ( 2182): SISO TEST PVOMA1FFRecognizerFactory::CreateRecognizerPlugin() plugin found
D/        ( 2182): SISO TEST PVOMA1FFRecognizerFactory::DestroyRecognizerPlugin()
E/OsclDirectFileIO( 2182): [LargeFileSupport] OsclDirectFileIO::OpenFileOrSharedFd Error = -1
W/MediaPlayer( 3326): info/warning (1, 26)
E/PlayerDriver( 2182): Command PLAYER_SET_DATA_SOURCE completed with an error or info -4
E/MediaPlayer( 3326): SISO TEST MEDIA_ERROR
E/MediaPlayer( 3326): error (-4, -4)
W/PlayerDriver( 2182): PVMFInfoErrorHandlingComplete
V/MediaProvider( 2349): stopThumbWorkerSuspendTimer
V/MediaProvider( 2349): Resuming ThumbWorker
W/MediaProvider( 2349): Have message but no request?
I/System.out( 2647): interface name: null
I/MediaPlayer( 3326): Info (1,26)
E/MediaPlayer( 3326): Error (-4,-4)
D/VideoView( 3326): Error: -4,-4
D/MediaUploader( 2492): UploadManager.uploadPendingItems: Waiting for GPhotos sync
D/MediaUploader( 2492): UploadsQueue.getAllPending: elapsed msec=5
I/MediaUploader( 2492): UploadManager.uploadPendingItems: Found 1 items in queue.
I/POWER_OFF_TEST( 2227): mBatteryLevel = 38   mBatteryDecimalPoint = 1
D/MediaUploader( 2492): UploadsAsyncQueryHandler.notifiyDatabaseChangeListeners
D/MediaUploader( 2492): isGphotosSynced: FALSE -- update is in progress for -5709461173740324808
D/MediaUploader( 2492): UploadManager.uploadPendingItems: Waiting for GPhotos sync
D/MediaUploader( 2492): updateQueueState: RUNNING
I/GooglePlusOne( 2492): Starting new CAMERA_SYNC_CREATED request 1
I/ActivityManager( 2227): Displayed activity com.zoodigapp.zoodig/com.zoodigapp.media.ShowVideo: 1251 ms (total 1251 ms)
V/InputDevice( 2227): ID[0]=0 Dn (0=>1)
V/WindowManager( 2227): Dsptch >Window{47a67278 com.zoodigapp.zoodig/com.zoodigapp.media.ShowVideo paused=false}
D/dalvikvm( 2227): GC freed 4009 objects / 210024 bytes in 155ms
V/InputDevice( 2227): ID[0]=0 Up (1=>0)
V/WindowManager( 2227): Dsptch >Window{47a67278 com.zoodigapp.zoodig/com.zoodigapp.media.ShowVideo paused=false}
W/InputManagerService( 2227): Window already focused, ignoring focus gain of: com.Android.internal.view.IInputMethodClient$Stub$Proxy@47d89250
D/dalvikvm( 2492): GC freed 11952 objects / 682568 bytes in 171ms
D/dalvikvm( 2647): GC freed 7435 objects / 656456 bytes in 26ms
D/dalvikvm( 2647): GC freed 3079 objects / 498304 bytes in 60ms
I/System.out( 2647): interface name: null
I/GooglePlusOne( 2492): CAMERA_SYNC_CREATED request 1 completed with code=200
D/MediaUploader( 2492): onGphotosChange: sawError=false; errs=0; retry=Wed Dec 31 17:00:00 America/Boise 1969; expiry=Mon Oct 17 10:56:20 America/Boise 2011
D/MediaUploader( 2492): UploadsQueue.getAllPending: elapsed msec=17
I/MediaUploader( 2492): UploadManager.uploadPendingItems: Found 1 items in queue.
D/MediaUploader( 2492): isGphotosSynced: TRUE for -5709461173740324808
D/MediaUploader( 2492): existsInGphotos: false info=name=video-2011-10-17-10-40-54.mp4 fileUri=content://media/external/video/media/37 fileSize=2477915;
D/MediaUploader( 2492): UploadManager.uploadPendingItems: starting upload...
D/MediaUploader( 2492): UploadManager.upload: info=name=video-2011-10-17-10-40-54.mp4 fileUri=content://media/external/video/media/37 fileSize=2477915
I/NetworkStat( 2678): Network type: MOBILE
I/NetworkStat( 2678): -------- mobile data network is NOT available as of now
D/NotificationService( 2227): enqueueNotification :: notification.defaults = 0, Notification.DEFAULT_SOUND = 1, notification.sound = null
D/dalvikvm( 2492): GC freed 4032 objects / 238248 bytes in 49ms
I/dalvikvm-heap( 2492): Grow heap (frag case) to 6.708MB for 524304-byte allocation
D/dalvikvm( 2492): GC freed 291 objects / 13392 bytes in 58ms
D/MediaUploader( 2492): UploadsAsyncQueryHandler.notifiyDatabaseChangeListeners
D/MediaUploader( 2492): GlsAuthorizer.getAuthToken: authTokenType=lh2; [email protected];
D/MediaUploader( 2492): executeWithAuthRetry: starting httpClient.execute #1
D/dalvikvm( 2870): GC freed 555 objects / 24144 bytes in 269ms
I/System.out( 2492): interface name: null
V/InputDevice( 2227): ID[0]=0 Dn (0=>1)
V/WindowManager( 2227): Dsptch >Window{47cf6308 com.zoodigapp.zoodig/com.zoodigapp.media.ShowVideo paused=false}
V/InputDevice( 2227): ID[0]=0 Up (1=>0)
V/WindowManager( 2227): Dsptch >Window{47cf6308 com.zoodigapp.zoodig/com.zoodigapp.media.ShowVideo paused=false}
D/dalvikvm( 2647): GC freed 7301 objects / 659064 bytes in 78ms
I/System.out( 2647): interface name: null
I/System.out( 2647): interface name: null
I/System.out( 2647): interface name: null
D/dalvikvm( 2647): GC freed 2654 objects / 324016 bytes in 149ms
I/System.out( 2647): interface name: null
D/MediaUploader( 2492): getStatusCode: status=HTTP/1.1 200 OK
D/MediaUploader( 2492): getStatusCode: status=HTTP/1.1 200 OK
D/MediaUploader( 2492): UPLOAD_START: uploadUrl=https://picasaweb.google.com/data/upload/resumable/media/create-session/feed/api/user/default/albumid/camera-sync?xmlerrors=1&upload_id=AEnB2Uqe2bdvyx5p31Ta-sS4ytggj07_6-uiKG_hCOc6sT1u8eqhvr-8oZdUT1uPHxuAxXphUiJXyq-i_8YaJlT2YLholp__Sw
D/MediaUploader( 2492): UploadManager.onProgress
V/MediaUploader( 2492): UploadManager.progressUpdate: guid=1351689615505998240; bytes=0
D/dalvikvm( 2647): GC freed 920 objects / 202544 bytes in 53ms
D/dalvikvm( 2492): GC freed 7362 objects / 498448 bytes in 73ms
D/MediaUploader( 2492): UploadsAsyncQueryHandler.notifiyDatabaseChangeListeners
D/dalvikvm( 2492): GC freed 658 objects / 129232 bytes in 42ms
I/dalvikvm-heap( 2492): Grow heap (frag case) to 7.250MB for 262160-byte allocation
D/dalvikvm( 2492): GC freed 0 objects / 0 bytes in 41ms
D/dalvikvm( 2492): GC freed 92 objects / 135128 bytes in 30ms
I/dalvikvm-heap( 2492): Grow heap (frag case) to 7.621MB for 524304-byte allocation
D/dalvikvm( 2492): GC freed 0 objects / 0 bytes in 44ms
D/MediaUploader( 2492): executeWithAuthRetry: starting httpClient.execute #1
D/dalvikvm( 2647): GC freed 576 objects / 53240 bytes in 182ms
V/InputDevice( 2227): ID[0]=0 Dn (0=>1)
V/WindowManager( 2227): Dsptch >Window{47cf6308 com.zoodigapp.zoodig/com.zoodigapp.media.ShowVideo paused=false}
V/InputDevice( 2227): ID[0]=0 Up (1=>0)
V/WindowManager( 2227): Dsptch >Window{47cf6308 com.zoodigapp.zoodig/com.zoodigapp.media.ShowVideo paused=false}
I/ActivityManager( 2227): Starting activity: Intent { cmp=com.zoodigapp.zoodig/.WriteMessage (has extras) }

よく説明されていないものを見つけたら、以下にコメントしてください。

追加の詳細(コメントから移動):

  • わずか1分で、最後にサムスンでテストして失敗したのはわずか20秒でした。現在のサイズはほとんどがMBで、20 MB以下です。
  • ビデオは同じデバイスから撮影され、そのビデオを撮影した直後に、他の既に保存されているビデオも同じように私のアクティビティで表示しようとします...実際にそのビデオをアップロードした後、私はそのビデオを見ることができ、ダウンロードすることもできます
24
MKJParekh

1)「ビデオを再生できません」というメッセージが表示された場合

Androidは通常、メディアコンテンツを再生できない場合にこのメッセージを出力します。これが起こる理由は次のようなものです。

  • サポートされていないファイル形式
  • サポートされていないコーデック
  • 誤ったコンテンツ

いくつか言及します。

2)そのための解決策は何ですか?

アプリに独自のメディアフレームワークがない限り、アプリケーションレベルのソリューションはありません。

3)アプリケーションで起こりうる間違いは何ですか?

アプリケーションに間違いがあることはほとんどありません。ログを読むと、エラーはopencoreのデータソースから発生しているように見えます(どのバージョンのAndroidを実行していますか?StageFrightではなくOpencoreを使用しています)。大きなファイル(> 2GB)として認識しているため、エラーが発生していますE/OsclDirectFileIO(2182):[LargeFileSupport] OsclDirectFileIO :: OpenFileOrSharedFd Error = -1

その他の注意点は、特定の電話は他の電話よりも優れたマルチメディア機能を備えていることです。OEM自体がマルチメディア機能を改善できるからです。そのため、サポートされている形式(Androidが言及しているコーデック)に準拠している場合でも、すべてのファイルをすべてのデバイスで再生できるという書面による保証はありません。

21
bluefalcon

そのすべての形式の問題については、一部の電話はmp4形式でビデオを記録し、一部は3gp形式で記録しますが、ほとんどすべての電話でデフォルトのメディアプレーヤーは3gp形式をサポートします。解決策は、プレイ時に3gpに変換する必要があることです。このことはAndroidで処理するのが難しいため、サーバーエンドで簡単に実行できます。したがって、アップロードするビデオの形式に関係なく、1つの形式.3gpでダウンロードでき、正常に動作します。

4
PiyushMishra

ビデオがMP4形式であることを確認してください。ただし、まだ再生されないか、同じエラーが表示される場合は、コードに問題はありません。障害はビデオ解像度にあります。ビデオの高さと幅を確認し、ビデオビューコンポーネントと一致させるだけです。オンラインで無料のビデオコンプレッサーがたくさんあります。したがって、ビデオを圧縮してテストするだけです。

それが動作します。乾杯!!!

3
Tara

電話自体からビデオを再生しようとしたときに、同じ「ビデオを再生できません」というメッセージが表示され続けました。最初に、ファイルへの適切なパスを入力しませんでしたが、別の興味深い問題がありました。

  1. ルートからパスを入力しました。例/ videoFileName.mp4の間にsdcardを入力する必要があります/ sdcard/videoFileName.mp4

  2. Sony Ercisson Xperia Arcは、adbを介してアプリを実行しているときにUSB大容量デバイスストレージとして接続されていたため、内部sdカードがマウント解除され、ファイルが見つかりませんでした。接続時に異なる動作をするSamsung Galaxy Sで同じコードを試したときに、これを発見しました。

2

Googleは最近、Google IO 2014の後のExoplayerをオープンソースにしました。それでのビデオ再生の私の経験はこれまでのところ良かったです。

https://github.com/google/ExoPlayer

  1. Dropbox/AWSから動画をストリーミングできました
  2. YouTubeからビデオをストリーミングします。

物事はまだデバイスでサポートされているコーデックに依存しています。

2
JaydeepW

H.264ベースラインエンコーディングを持つmp4ファイルがあり、それでもAndroidデバイスでビデオを再生できない場合、サーバー側の.htAccessファイルに問題がある可能性があります。 mp4ファイル。いくつかのデバイスは、ビデオを解凍してストリーミングすることはできますが、すべてのデバイスで使用できるわけではありません。サーバー側で.htAccessファイルを変更する必要があります。ストリーミング時に。

SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png|swf|mp4)$ \ no-gzip dont-vary
2
Jigar

私は同じ問題に遭遇し、URLからビデオを取得しているため、マニフェストファイルにインターネットアクセス許可を追加することでうまくいきました。

 <uses-permission Android:name="Android.permission.INTERNET"/>

これは私がビデオのリストビューを埋める方法です。

   //assign video
    mVideosListView = (ListView) findViewById(R.id.videoListView);

    //create videos
    Video riverVideo = new Video("https://s3.amazonaws.com/androidvideostutorial/862009639.mp4");
    Video carsVideo = new Video("https://s3.amazonaws.com/androidvideostutorial/862013714.mp4");
    Video townVideo = new Video("https://s3.amazonaws.com/androidvideostutorial/862014159.mp4");
    Video whiteCarVideo = new Video("https://s3.amazonaws.com/androidvideostutorial/862014159.mp4");
    Video parkVideo = new Video("https://s3.amazonaws.com/androidvideostutorial/862014834.mp4");
    Video busyCityVideo = new Video("https://s3.amazonaws.com/androidvideostutorial/862017385.mp4");

    mVideosList.add(riverVideo);
    mVideosList.add(carsVideo);
    mVideosList.add(townVideo);
    mVideosList.add(whiteCarVideo);
    mVideosList.add(parkVideo);
    mVideosList.add(busyCityVideo);

    /***populate video list to adapter**/
    mVideoAdapter = new VideoAdapter(this, mVideosList);
    mVideosListView.setAdapter(mVideoAdapter);

enter image description here

1
Ronny Kibet

VideoViewの使用中にこの同じ問題が発生しましたが、AndroidManifest.xmlファイル内の問題に関するすべてのことを確認しようとしましたが、使用許可に関するものでした EXTERNAL STORAGE 試してみてください問題を解決するかもしれません。

1
Amitesh

同じ問題に一度直面しました。私の場合、唯一の問題はファイル形式でした。 iビデオ形式を.mp4に変更しただけで、使用したすべてのデバイスとエミュレーターでチャームのように機能します。私の提案は、まずビデオ形式を確認してから、他の解決策を試すことです。

1
Sohail Yasin