无法使用VideoView for API播放视频< 16错误-2147483648

时间:2017-07-20 13:02:22

标签: java android api android-mediaplayer android-videoview

我是Java和Android的新手。我只是计划用几部智能手机进行多媒体安装。这些是旧的,使用Android 2.3(API 10)和更高版本(最高API 16)的智能手机我正在测试流媒体视频的不同可能性。我测试的第一种方法是使用一个视频文件放在我通过WLAN访问的服务器上:

...
   String vidAddress = "http://www.XXXXXXXXXXXXXXX.mp4";
   startVideo(vidAddress);
...
   public void startVideo(String vidAddress){
        // starts a video - currently from internet
        vidView = (VideoView)findViewById(R.id.myVideo);
        vidUri = Uri.parse(vidAddress);
        vidView.setVideoURI(vidUri);
        vidView.start();
    }

这适用于我测试的所有API级别:API 10-16。我的问题是,我不能指望WLAN可以在多媒体安装显示的地方使用。因此,我必须将视频存储在智能手机上。这是我在内部存储上做的。

如果我更换:

   String vidAddress = "http://www.XXXXXXXXXXXXXXX.mp4";
   startVideo(vidAddress);

通过

   String vidAddress=getFilesDir()+"/"+vidFile;
   startVideo(vidAddress);

这适用于API 16,但不适用于API 15及更早版本。在Android Studio的Android监视器中,我收到以下错误消息:

07-20 14:50:23.260 23279-23279/eu.karin_daum.daum.reality D/***** Reality ONE: /data/data/eu.karin_daum.daum.reality/files/mundtest_005_2.mp4 file exists - length 1505189 bytes *****
07-20 14:50:23.260 23279-23279/eu.karin_daum.daum.reality E/MediaPlayer: Uri is  /data/data/eu.karin_daum.daum.reality/files/mundtest_005_2.mp4
07-20 14:50:23.280 23279-23290/eu.karin_daum.daum.reality E/MediaPlayer: error (1, -2147483648)
07-20 14:50:23.290 23279-23279/eu.karin_daum.daum.reality E/MediaPlayer: Error (1,-2147483648)
07-20 14:50:23.290 23279-23279/eu.karin_daum.daum.reality D/VideoView: Error: 1,-2147483648

第一行是我在startVideo中实现的调试打印输出,用于检查文件是否可访问且长度是否正确。我也尝试了'setVideoPath'方法而不是'setVideoURI',结果相同:适用于API 16而不适用于旧版本。

如果有任何帮助解决我的问题,我将不胜感激。谢谢,卡琳

1 个答案:

答案 0 :(得分:0)

我可以解决问题,这意味着我找到了解决方法。

显然,在VideoView for API< 16中使用来自内部存储的视频文件存在问题(我猜是因为我对新手的无知)。使用外部存储,例如

import static android.os.Environment.DIRECTORY_MOVIES;

...

   private File filePath;

...

filePath = new File(String.valueOf(Environment.getExternalStoragePublicDirectory(DIRECTORY_MOVIES)));

...然后将视频文件复制到目录filePath中并检索它们以播放视频

 vidAddress=String.valueOf(filePath)+"/"+vidFile;
 startVideo(vidAddress);

即使没有插入SD卡,也可以使用上面给出的所有测试过的API(10,15,16)。

Android Studio中Android监视器上的相关消息(例如Samsung GT S-5830i API 10)

07-20 16:23:57.117 12548-12548/eu.karin_daum.daum.reality D/VideoView: onMeasure()
07-20 16:23:57.117 12548-12548/eu.karin_daum.daum.reality I/VideoView:     Setting size: 320x399
07-20 16:24:01.312 12548-12548/eu.karin_daum.daum.reality D/***** Reality ONE: /mnt/sdcard/Movies/mundtest_005_2.mp4 file exists - length 1505189 bytes *****
07-20 16:24:01.320 12548-12548/eu.karin_daum.daum.reality D/VideoView: onMeasure()
07-20 16:24:01.320 12548-12548/eu.karin_daum.daum.reality I/VideoView:     Setting size: 320x399
07-20 16:24:01.460 12548-12548/eu.karin_daum.daum.reality D/VideoView: onMeasure()
07-20 16:24:01.476 12548-12548/eu.karin_daum.daum.reality I/VideoView:     Setting size: 299x399
07-20 16:24:01.500 12548-12548/eu.karin_daum.daum.reality D/MediaPlayer: getMetadata
07-20 16:24:01.500 12548-12548/eu.karin_daum.daum.reality I/VideoView: start()
07-20 16:24:01.515 12548-12548/eu.karin_daum.daum.reality I/VideoView: start()
07-20 16:29:30.929 12548-12550/eu.karin_daum.daum.reality D/dalvikvm: GC_CONCURRENT freed 359K, 48% free 3016K/5767K, external 697K/1036K, paused 3ms+3ms