Android - 无法播放任何视频(mp4 / mov / 3gp /等)?

时间:2010-03-30 10:15:44

标签: android video android-videoview

我很难让我的Android应用程序播放SD卡上的视频。无论大小,比特率​​,视频格式或我能想到的任何其他设置都无关紧要,模拟器和我的G1都不会播放我尝试编码的任何内容。我也尝试了一些来自网络的视频(各种视频格式,比特率,有和没有音频轨道等),但这些都没有。

我不断得到的是一个对话框,上面写着:

“无法播放视频”

“抱歉,此视频无法播放。”

在LogCat中报告了错误,但我不理解它们,我试图在互联网上搜索没有任何运气的进一步解释。见下文:

03-30 05:34:26.807: ERROR/QCOmxcore(51): OMXCORE API :  Free Handle 390d4
03-30 05:34:26.817: ERROR/QCOmxcore(51):  Unloading the dynamic library for OMX.qcom.video.decoder.avc
03-30 05:34:26.817: ERROR/PlayerDriver(51): Command PLAYER_PREPARE completed with an error or info PVMFErrNoResources
03-30 05:34:26.857: ERROR/MediaPlayer(14744): error (1, -15)03-30 05:34:26.867: ERROR/MediaPlayer(14744): Error (1,-15)

有时我也会这样:

03-30 05:49:49.267: ERROR/PlayerDriver(51): Command PLAYER_INIT completed with an error or info PVMFErrResource
03-30 05:49:49.267: ERROR/MediaPlayer(19049): error (1, -17)
03-30 05:49:49.347: ERROR/MediaPlayer(19049): Error (1,-17)

这是我正在使用的代码(在我的onCreate()方法中):

this.setContentView(R.layout.main);
//just a simple VideoView loading files from the SD card
VideoView myIntroView = (VideoView) this.findViewById(R.id.VideoView01);
MediaController mc = new MediaController(this);
myIntroView.setMediaController(mc);
myIntroView.setVideoPath("/sdcard/test.mp4");
myIntroView.requestFocus();
myIntroView.start();

请帮忙!

3 个答案:

答案 0 :(得分:10)

好的,到此为止。我一直在Adobe Premiere上工作的视频应该是480x800(WxH),但是我有Adobe Media Encoder使用“UYVY”视频编解码器输出序列作为“未压缩的Microsoft AVI”,帧速率为24fps,渐进式,方形像素和尺寸:720x800(WxH)。这会在视频内容的两侧输出一个相当大的文件,其中包含120px黑色边框。然后我将视频带入Handbrake 0.9.4并使用以下设置(我从Regular-> Normal预设开始):

Container: MP4 File
Large file size: [un-Checked]
Web-optimized: [un-Checked]
iPod 5G support: [un-Checked]

Width: 320 (this is key, any higher than 320 and it won’t work)
Height: 528
Keep Aspect Ratio: [Checked]
Anamorphic: None

Crop Left: 120
Crop Right: 120

Everything under the "Video Filter" tab set to "Off"

Video Codec: H.264(x264)
Framerate: same as source
2-Pass Encoding: [Checked]
Turbo first pass: [un-Checked]
Avg Bitrate: 384

Create chapter markers: [un-Checked]

Reference Frames: 2
Mixed References: [un-Checked]
B-Frames: 0
Motion Estimation Method: Uneven Multi-Hexagon
Sub-pixel Motion Estimation: 9
Motion Estimation Range: 16
Analysis: Default
8x8 DCT: [un-Checked]
CABAC Entropy Coding: [un-Checked]
No Fast-P-Skip: [un-Checked]
No DCT-Decimate: [un-Checked]
Deblocking: Default, Default
Psychovisual Rate Distortion: [MAX]

我的主要问题是我试图输出一个480x800(WxH)尺寸的mp4文件。将宽度更改为320(更高的值不起作用),但保持正确的宽高比后,输出视频现在可以正常播放。我希望这可以帮助其他有类似问题的人。

附注:我希望更好地记录Android视频限制。

答案 1 :(得分:3)

我在手机上播放许多不同的视频时遇到了很多麻烦(HTC英雄)。标准的512K mp4播放(例如:http://www.archive.org/details/more_animation),先与他们核对,确保它不是您的代码。

这是我的代码,来自onCreate()的子活动中只播放视频文件:




    protected VideoView mine;
    protected boolean done = false;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.videoshow);  
        mine = (VideoView) findViewById(R.id.video);   // Save the VideoView for touch event processing 
        try {
            String myURI = "/sdcard/" + path + "/v/" 
                          + currentItem.getFile() 
                          + "." + currentItem.getFileType();
            Uri video = Uri.parse(myURI); 
            mine.setVideoURI(video);
            mine.start();
            mine.setOnCompletionListener(new OnCompletionListener() {

                public void onCompletion(MediaPlayer mp) {  
                    result.putExtra("com.ejf.convincer01.Finished", true);
                    done = true;
                }
            });
        } catch (Exception ex) {
            Log.d(DEBUG_TAG, "Video failed: '" + ex + "'" );
        }

答案 2 :(得分:0)

我遇到了这个问题,直到我发现问题出现在我的视频目录中。我将视频保存到视频视图无法访问的目录中。因此,每当我尝试播放视频时,它都会向我显示错误消息:“无法打开视频”或类似的内容。 尝试将您的视频保存到此目录,该目录也会在电话库中显示。

String path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) + "/" + "your app name ";