我很难让我的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();
请帮忙!
答案 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 ";