【发布时间】:2011-08-24 05:58:09
【问题描述】:
我将视频test.mp4 保存在我项目的res/raw 目录中。我的SurfaceView 声明如下:
<SurfaceView android:id="@+id/surface"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center">
</SurfaceView>
然后,在我的活动的onCreate () 方法中,我有以下内容:
private MediaPlayer mp;
private SurfaceView view;
private SurfaceHolder holder;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
view = (SurfaceView) findViewById (R.id.surface);
holder = view.getHolder();
holder.setKeepScreenOn (true);
mp = MediaPlayer.create(this.getBaseContext (), R.raw.test);
mp.setDisplay (holder);
mp.setLooping (true);
mp.start();
}
我不明白为什么它不显示视频,即使我设置了显示。我在 API 7 (2.1.1) 上运行,我得到了音频。我需要一个纯视频类型的界面,没有控制面板。据我所知,VideoView 虽然比MediaPlayer 简单,但是有一个内置的控制层。另外,我看不到在资源上使用VideoView 的方法。如果我有这两个问题的解决方法,或者如果我对VideoView 的假设是错误的,我会很高兴被告知。
更新:我目前正在使用VideoView 类。关于自动拥有 UI 控制面板,我的假设确实是错误的。尽管如此,我仍然无法通过MediaPlayer 类播放存储在res/raw 中的视频;当我拨打prepare () 或播放音频时,它总是失败,但视频没有。因此,我的问题仍然存在。
如果有人遇到关于我如何使用 VideoView 的问题,让我为您省去一些麻烦,让您在寻找如何检索 res/raw 中的视频时免去一些麻烦。以下 sn-p 假设您在布局文件 main.xml 中有一个 ID 为 view 的 VideoView:
public class generalActivity extends Activity {
@Override
public void onCreate (Bundle icicle) {
super.onCreate (icicle);
this.setContent (R.layout.main);
// You know the that view is an instance of VideoView, so cast it as such
VideoView v = (VideoView) this.findViewById (R.id.view);
// This is the name of the video WITHOUT the file extension.
// In this example, the name of the video is 'test.mp4'
String videoName = "test"
// You build the URI to your video here
StringBuilder uriPathBuilder = new StringBuilder ();
uriPathBuilder.append ("android.resource://");
uriPathBuilder.append (this.getPackageName ());
uriPathBuilder.append (File.separator);
uriPathBuilder.append ("raw");
uriPathBuilder.append (File.separator);
uriPathBuilder.append (videoName);
Uri uri = Uri.parse (uriPathBuilder.toString ());
view.setVideoURI (uri);
view.start ();
}
}
这是我用作获取 uri 路径的参考的链接:reference link
我将其保持打开状态,因为我询问是否可以使用 MediaPlayer 播放 res/raw 中的视频,而不是 VideoView。即使我使用VideoView 让它按照我想要的方式工作,据我所知,MediaPlayer 仍然可以做到VideoView 做不到的事情。不过我可能是错的,所以如果您只需要显示视频而不需要任何高级内容,我很确定VideoView 就足够了。
哦,感谢@Ravi 提供的所有帮助。
【问题讨论】:
-
我认为这里缺少 VideoView。
-
据我所知,
VideoView是MediaPlayer的包装。我选择使用MediaPlayer而不是VideoView。 -
我认为从 VideoView 播放更容易。
-
但是
VideoView没有控制面板吗?我需要在没有控制面板的情况下播放视频。 -
您可以在 VideoView 中不使用控制面板播放视频。
标签: android android-mediaplayer