Android VideoView的奇怪行为 - “无法播放视频”

时间:2011-10-18 11:09:29

标签: android 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"中测试此应用时,无论我选择现有视频还是选择新视频。

请记住,该应用在上述两种设备上运行良好。

在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; account=dprichards@gmail.com;
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。
  • 视频是从同一台设备上拍摄的,拍摄完该视频后,我尝试以同样的方式显示其他已存储的视频也很好...实际上,在上传该视频后,我可以看到该视频,也可以下载

11 个答案:

答案 0 :(得分:20)

1)当出现“无法播放视频”消息时?

Android通常会在无法播放媒体内容时发出此消息。发生这种情况的原因可能是

  • 不支持的文件格式
  • 不支持的编解码器
  • 错误内容

提一下。

2)有什么解决方案?

除非您的应用中有自己的媒体框架,否则应用程序级别没有解决方案

3)我的申请中可能出现的错误是什么?

您的申请中的错误不太可能。如果您阅读日志,您会看到错误似乎来自opencore的DataSource(您运行的是哪个版本的Android?它仍然使用Opencore而不是StageFright)。它将其识别为一个大文件(> 2GB),因此发出错误“ E / OsclDirectFileIO(2182):[LargeFileSupport] OsclDirectFileIO :: OpenFileOrSharedFd Error = -1

另外需要注意的是,某些手机具有比其他手机更好的多媒体功能,因为OEM可以自己提高多媒体功能。因此,没有书面保证所有文件都可以在所有设备上播放,即使它符合Android提到的支持格式,编解码器。

答案 1 :(得分:4)

一切都与格式问题有关,有些手机以mp4格式录制视频,有些以3gp格式录制,但在几乎所有手机中默认的媒体播放器都支持3gp格式。因此解决方案是您需要在播放时将其转换为3gp。这个东西在android中很难处理,所以在服务器端你可以轻松完成,因此无论上传的视频格式是什么,你都可以用一种格式.3gp下载它,它会正常工作。

答案 2 :(得分:2)

在尝试从手机本身播放视频时,我一直收到相同的“无法播放视频”消息。首先,我没有输入文件的好路径,但还有其他有趣的问题。

  1. 我从根目录键入路径,例如 /videoFileName.mp4 ,我应该在其中键入sdcard,如 /sdcard/videoFileName.mp4

  2. 我的索尼Ercisson Xperia Arc在我通过adb运行我的应用程序的同时作为USB大容量设备存储连接,因此内置SD卡已卸载且无法找到文件。当我在三星Galaxy S上尝试使用相同的代码时,我发现了这一点,当连接时它的行为有所不同。

答案 3 :(得分:2)

Google最近在Google IO 2014之后开源Exoplayer。 到目前为止,我使用它的视频体验很不错。

https://github.com/google/ExoPlayer

  1. 我可以从Dropbox / AWS流式传输视频
  2. 从youtube流式传输视频。
  3. 事情仍取决于设备支持的编解码器。

答案 4 :(得分:2)

如果您的mp4文件具有H.264基线编码,但仍然无法在Android设备中播放视频,那么在服务器端的.htAccess文件中可能会出现问题。它可能是压缩.mp4文件。很少有设备能够通过解压缩并播放视频来播放视频,但不能在所有设备情况下播放视频。您需要在服务器端更改.htAccess文件。更改输出过滤器并包含文件格式.mp4,以便在流式传输时将其排除在zip之外。

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

答案 5 :(得分:2)

确保您的视频采用MP4格式,但如果仍然无法播放或显示相同的错误,则代码不会出现故障。故障在于视频分辨率。只需检查视频的高度和宽度,并将其与视频视图组件相匹配。有很多免费视频压缩器在线可用。所以只需压缩视频并进行测试即可。

它会起作用。 干杯!!!

答案 6 :(得分:1)

我在使用VideoView时遇到了同样的问题,而我试图检查有关视频的所有内容,问题出在AndroidManifest.xml文件中,关于使用EXTERNAL STORAGE的权限给它一个镜头可能解决问题。

答案 7 :(得分:1)

我遇到了同样的问题,因为我从网址获取视频,所以有效的方法是将清单文件添加到Internet文件中。

 <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

答案 8 :(得分:1)

我曾经遇到过同样的问题。在我的情况下,唯一的问题是fie格式。我刚刚将视频格式更改为.mp4,它在我使用的所有设备和模拟器上都像魅力一样。 我的建议是先检查你的视频格式,然后尝试其他解决方案。

答案 9 :(得分:-1)

对我来说,视频使用的编解码器存在问题。 我安装了Any Video Converter并使用Google Android(x264)的设置转换了视频。 现在我可以在每台设备上播放。

答案 10 :(得分:-3)

我的问题是我用.avi格式而不是.m4v格式保存了它,它在我的三星上很有魅力...感谢大家的帮助!