web-dev-qa-db-fra.com

Comportement étrange de Android VideoView - "Can't Play Video"

Dans mon application, montrant la vidéo du dossier sdcard ou la nouvelle vidéo prise à partir de l'intention de la vidéo dans une VideoView dans une activité différente en passant le chemin du fichier de la vidéo sélectionnée.

Maintenant, le problème est que j'ai testé cette application sur mes 2 appareils LG Optimus Black and LG Optimus Me and it works comme le charme pas de problème aucune force à proximité.

Maintenant, quand je teste cette application dans Samsung Fascinate 2.1 the video view shows the message "Can't Play Video" peu importe que je sélectionne une vidéo existante ou que j'en prenne une nouvelle.

N'oubliez pas que l'application fonctionne correctement avec les 2 appareils ci-dessus.

Dans l'activité ShowVideo, j'ai un bouton pour télécharger la vidéo, quand j'ai reçu le message "Can't Play Video", j'ai pu prendre la vidéo du même chemin et la télécharger et je peux vérifier que vidéo côté serveur mais la vue vidéo n'a pas lu cette vidéo.

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

.

Mes questions sont:

1) Lorsque le message "Can't Play Video" apparaît? 2) Quelle est la solution pour cela? et 3) Quelles pourraient être les erreurs possibles dans ma candidature?

voici la sortie logcat pendant que je reçois ce message, mais je n'y vois aucune erreur/exception.

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) }

Si vous trouvez quelque chose de mal décrit, veuillez commenter ci-dessous.

Détails supplémentaires (déplacés des commentaires):

  • Ils ne durent que 1 minute et le dernier que j'ai testé et échoué sur Samsung n'était que de 20 secondes. et les tailles sont pour la plupart en Mo, pas plus de 20 Mo pour le moment.
  • La vidéo est prise à partir du même appareil et immédiatement après avoir pris cette vidéo, j'essaie de montrer dans mon activité de la même manière que les autres vidéos déjà stockées sont également très bien ... en fait, après avoir téléchargé cette vidéo, je peux voir cette vidéo et la télécharger également
24
MKJParekh

1) Lorsque le message "Can't Play Video" apparaît?

Android diffuse généralement ce message lorsqu'il n'est pas en mesure de lire le contenu multimédia. Les raisons pour lesquelles cela se produit peuvent être quelque chose comme

  • Format de fichier non pris en charge
  • Codecs non pris en charge
  • Contenu erroné

pour n'en mentionner que quelques-uns.

2) Quelle est la solution pour cela?

À moins que vous n'ayez votre propre Media Framework dans votre application, il n'y a pas de solution au niveau de l'application

3) Quelles pourraient être les erreurs possibles dans ma candidature?

Il est très peu probable que l'erreur se trouve dans votre candidature. Si vous lisez les journaux, vous verrez que l'erreur semble provenir de la source de données d'opencore (quelle version de Android utilisez-vous de toute façon? Il utilise toujours Opencore au lieu de StageFright). le reconnaît comme un gros fichier (> 2 Go) et donne donc l'erreur "E/OsclDirectFileIO (2182): [LargeFileSupport] OsclDirectFileIO :: OpenFileOrSharedFd Erreur = -1"

L'autre chose à noter est que certains téléphones ont une meilleure capacité multimédia que les autres téléphones, car les OEM peuvent eux-mêmes améliorer la capacité multimédia. Il n'y a donc aucune garantie écrite que tous les fichiers peuvent être lus sur tous les appareils, même s'ils sont conformes aux formats pris en charge, les codecs mentionnés par Android.

21
bluefalcon

Son tout sur le problème de format, Certains téléphones enregistrent la vidéo au format mp4 et certains au format 3gp, mais dans presque tous les téléphones, le lecteur multimédia par défaut prend en charge le format 3gp. La solution est donc que vous devez le convertir en 3gp au moment de la lecture. Cette chose est difficile à gérer dans Android, donc à la fin du serveur, vous pouvez le faire facilement et donc quel que soit le format de la vidéo en cours de téléchargement, vous pouvez le télécharger dans un format .3gp et cela fonctionnera bien.

4
PiyushMishra

Assurez-vous que votre vidéo est au format MP4, mais si elle ne fonctionne toujours pas ou affiche la même erreur, la faute n'est pas due au code. Le défaut est dans la résolution vidéo. vérifiez simplement la hauteur et la largeur de votre vidéo et associez-la à votre composant d'affichage vidéo. Il existe de nombreux compresseurs vidéo gratuits en ligne. Il vous suffit donc de compresser votre vidéo et de la tester.

Ça va marcher. À votre santé!!!

3
Tara

J'ai continué à recevoir le même message "Impossible de lire la vidéo" tout en essayant de lire la vidéo à partir du téléphone lui-même. Tout d'abord, je n'ai pas entré le bon chemin d'accès à un fichier, mais il y avait un autre problème intéressant.

  1. J'ai tapé le chemin depuis la racine, exemple / videoFileName.mp4 et j'aurais dû le taper avec sdcard entre comme / sdcard/videoFileName.mp4

  2. Mon Sony Ercisson Xperia Arc était connecté en tant que périphérique de stockage de masse USB en même temps que j'exécutais mon application via adb, donc la carte SD interne a été démontée et le fichier est introuvable. Je l'ai découvert lorsque j'ai essayé le même code sur Samsung Galaxy S qui se comporte différemment lorsqu'il est connecté.

2
Nemanja Kovacevic

Google a récemment ouvert Exoplayer source après Google IO 2014. Mon expérience avec la lecture vidéo avec elle a été bonne jusqu'à présent.

https://github.com/google/ExoPlayer

  1. Je pourrais diffuser des vidéos depuis Dropbox/AWS
  2. Diffusez des vidéos à partir de YouTube.

Les choses dépendent toujours des codecs pris en charge par l'appareil.

2
JaydeepW

Si vous avez un fichier mp4 ayant un codage de base H.264 et que vous ne parvenez toujours pas à lire la vidéo dans votre appareil Android, alors il peut y avoir un problème dans le fichier .htAccess côté serveur. Il peut être compressé. fichier mp4. peu de périphériques peuvent lire la vidéo en la décompressant et en la diffusant mais pas dans tous les cas de périphériques. Vous devez modifier le fichier .htAccess côté serveur. Changer le filtre de sortie et inclure le format de fichier .mp4 pour l'exclure du Zip au moment du streaming.

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

Je suis tombé sur le même problème et ce qui a fonctionné, c'est l'ajout de l'autorisation Internet au fichier manifeste depuis que je reçois une vidéo de l'url.

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

Voici comment je remplis la liste des vidéos.

   //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

J'ai eu ce même problème lors de l'utilisation de VideoView, alors que j'essayais de vérifier toutes les choses concernant la vidéo, le problème se trouvait dans le fichier AndroidManifest.xml, il s'agissait de la permission d'utiliser STOCKAGE EXTERNE donnez-lui un coup de feu pourrait résoudre le problème.

1
Amitesh

J'ai fait face au même problème une fois. Dans mon cas, le seul problème était le format fie. Je viens de changer le format vidéo en .mp4 et cela fonctionne comme sur tous les appareils et émulateurs que j'ai utilisés. ma suggestion est de vérifier d'abord votre format vidéo, puis d'essayer d'autres solutions.

1
Sohail Yasin