【问题标题】:Android -- Can't play any videos (mp4/mov/3gp/etc.)?Android -- 无法播放任何视频 (mp4/mov/3gp/etc.)?
【发布时间】:2010-03-30 10:15:44
【问题描述】:

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

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

“无法播放视频”

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

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

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();

请帮忙!

【问题讨论】:

    标签: android video android-videoview


    【解决方案1】:

    好的,到此为止。我在 Adob​​e Premiere 中处理的视频应该是 480x800 (WxH),但我让 Adob​​e Media Encoder 使用“UYVY”视频编解码器将序列输出为“未压缩的 Microsoft AVI”,24fps 帧速率,渐进式、方形像素和尺寸:720x800 (WxH)。这会在视频内容的任一侧输出一个带有 120 像素黑色边框的相当大的文件。然后我将视频带入 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 视频限制。

    【讨论】:

    • “我希望 Android 视频限制得到更好的记录。”我非常认同你。我什至按照您的示例进行操作,但仍然无法播放视频。
    • 能否请您发布代码您在这里所做的事情是不可理解的,实际上我是这个领域的新手,任何帮助都会得到帮助。
    • 是的,使用 VideoView 和 MediaPlayer 真的很痛苦。感谢您的问答。
    • 您能具体说明您在代码中所做的哪些更改可以解决问题吗?我也遇到了同样的问题,请您帮忙。??
    • @Frankenstein 我并没有真正更改代码;我更改了用于生成/编码视频的应用程序中的视频编码设置(手刹......它是免费的)。尽管如此,这些设置可能对您不起作用。他们为我工作。
    【解决方案2】:

    我在手机上播放许多不同的视频时遇到了很多麻烦(HTC hero)。标准 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 + "'" );
            }
    

    【讨论】:

    • 感谢您的回复。我听取了您的建议并从您提供的网站“The Lost Kitten 1938”(512k mpeg4)下载了一个视频,它使用我提供的完全相同的代码完美运行。这次真是万分感谢。我将尝试重新编码我的视频以匹配下载样本的规格并返回以发布详细信息。您是否知道我应该在编码器中使用的确切设置(我可以使用 Adob​​e Media Encoder 或 Handbrake)?
    【解决方案3】:

    我一直面临这个问题,直到我发现问题出在我的视频目录中。我将视频保存到视频视图无法访问的目录中。所以每次我尝试播放视频时,它都会给我错误消息:“无法打开视频”或类似的东西。 尝试将您的视频保存到此目录,该目录也将显示在手机图库中。

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

    【讨论】:

      猜你喜欢
      • 2012-01-30
      • 1970-01-01
      • 2014-11-02
      • 2012-11-07
      • 1970-01-01
      • 2016-05-09
      • 1970-01-01
      • 1970-01-01
      • 2011-12-05
      相关资源
      最近更新 更多