我正在尝试在Android模拟器中播放视频 我的资源文件夹中的视频以及原始文件夹 但经过一些研究后,我仍然无法在我的模拟器中播放视频 我正在研究android 2.1 我的视频格式是mp4所以我不认为这应该是一个问题 任何人都可以给我一个示例代码,以便我能理解更多吗?
问题是我需要显示视频的VideoView只会使用URI或文件路径指向视频。
如果我将视频保存在raw或assets文件夹中,我只能获得输入流或文件描述符,似乎没有什么可用于初始化VideoView。
更新
我仔细研究了MediaPlayer示例,并尝试使用FileDescriptor启动MediaPlayer到资源文件,如下面的代码所示:
SurfaceView videoView = (SurfaceView) findViewById(gettingStarted)
SurfaceHolder holder = videoView.getHolder();
holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
final MediaPlayer player = new MediaPlayer();
player.setDisplay(holder);
player.setDataSource(getAssets().openFd(fileName).getFileDescriptor());
player.prepareAsync();
player.setOnPreparedListener(new OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mp.start();
}
});
现在我收到以下异常:
java.io.FileNotFoundException: This file can not be opened as a file descriptor; it is probably compressed
似乎没有其他方法可以在启动时将文件复制到SD卡,这似乎浪费时间和内存。
答案 0 :(得分:113)
## Perfectly Working since Android 1.6 ##
getWindow().setFormat(PixelFormat.TRANSLUCENT);
VideoView videoHolder = new VideoView(this);
//if you want the controls to appear
videoHolder.setMediaController(new MediaController(this));
Uri video = Uri.parse("android.resource://" + getPackageName() + "/"
+ R.raw.your_raw_file); //do not add any extension
//if your file is named sherif.mp4 and placed in /raw
//use R.raw.sherif
videoHolder.setVideoURI(video);
setContentView(videoHolder);
videoHolder.start();
答案 1 :(得分:11)
String UrlPath="android.resource://"+getPackageName()+"/"+R.raw.ur file name;
videocontainer.setVideoURI(Uri.parse(UrlPath));
videocontainer.start();
视频类型的视频容量。
答案 2 :(得分:10)
尝试:
AssetFileDescriptor afd = getAssets().openFd(fileName);
player.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(), afd.getLength());
答案 3 :(得分:8)
PlayVideoActivity.java:
public class PlayVideoActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_play_video);
VideoView videoView = (VideoView) findViewById(R.id.video_view);
MediaController mediaController = new MediaController(this);
mediaController.setAnchorView(videoView);
videoView.setMediaController(mediaController);
videoView.setVideoURI(Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.documentariesandyou));
videoView.start();
}
}
<强> activity_play_video.xml:强>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center" >
<VideoView
android:id="@+id/video_view"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</VideoView>
</LinearLayout>
答案 4 :(得分:4)
如果我记得很清楚,在从资产文件夹加载东西但是使用数据库时,我遇到了同样的问题。您的资产文件夹中的内容似乎有2个统计信息:压缩或不压缩 如果它被压缩,那么你可以让1 Mo的内存解压缩,否则你会得到这种异常。关于这一点有several bug reports因为文档不清楚。因此,如果您仍想使用您的格式,则必须使用未压缩的版本,或者为您的文件提供.mp3或.png等扩展名。我知道它有点疯狂,但我加载了一个扩展名为.mp3的数据库,它运行得非常好。另一种解决方案是使用特殊选项打包您的应用程序,告诉它不要压缩某些扩展名。但是,您需要手动构建应用程序并添加“zip -0”选项 未压缩的assest的优点是在发布应用程序之前zip-align的阶段将正确地对齐数据,以便在加载到内存中时可以直接映射。
答案 5 :(得分:3)
您是否尝试在SDCard上手动放置视频并尝试在SDCard上播放视频存储?
如果它正常工作,你可以在这里找到从Raw复制到SD卡的方法:
答案 6 :(得分:2)
我找到了它:
Uri raw_uri = Uri.parse(<package_name>/+R.raw.<video_file_name>);
Personnaly Android找到了资源,但暂时无法播放。我的文件是.m4v
答案 7 :(得分:1)
我认为您需要查看this - 它应该包含您想要的一切。
编辑:如果你不想看这个链接 - 这几乎总结了你想要的东西。
MediaPlayer mp = MediaPlayer.create(context,R.raw.sound_file_1); mp.start();
但我仍然建议您阅读链接中的信息。
答案 8 :(得分:1)
VideoView myVideo = (VideoView) rootView.findViewById(R.id.definition_video_view);
//Set video name (no extension)
String myVideoName = "my_video";
//Set app package
String myAppPackage = "com.myapp";
//Get video URI from raw directory
Uri myVideoUri = Uri.parse("android.resource://"+myAppPackage+"/raw/"+myVideoName);
//Set the video URI
myVideo.setVideoURI(myVideoUri);
//Play the video
myVideo.start();
答案 9 :(得分:0)
使用MediaPlayer
API和示例代码。
将媒体文件放在raw
文件夹中。
获取file descriptor
到该文件。
mediaplayer.setDataSource(fd,offset,length);
- 它的三个
参数构造函数。
然后onPreared
,mediaplayer.start();
答案 10 :(得分:0)
在fileName
中,您必须将相对路径放到文件中(不含/asset
)
例如:
player.setDataSource(
getAssets().openFd(**"media/video.mp4"**).getFileDescriptor()
);
答案 11 :(得分:0)
听起来可能就像你和我一样有同样的问题。而不是使用MP4,3GPP可能吗?我想我像HandBrake一样用作视频转换器...你只需要确保你有合适的编码器,比如H.264x或其他东西。抱歉有点模糊,已经有一段时间了。此外,如果可能的话,不要再担心Android 2.1了,而且,某些东西在EMULATOR中也不会起作用。所以如果它适用于很多设备,那么就假设它有效(特别是对于不同的制造商)
在这里,你可以阅读我的问题以及我是如何解决这个问题的(经过很长一段时间没有人得到答案)。我在这里解释了很多细节: android media player not working
答案 12 :(得分:-1)
MainCode
Uri raw_uri=Uri.parse("android.resource://<package_name>/+R.raw.<video_file_name>);
myVideoView=(VideoView)findViewbyID(R.idV.Video_view);
myVideoView.setVideoURI(raw_uri);
myVideoView.setMediaController(new MediaController(this));
myVideoView.start();
myVideoView.requestFocus();
XML
<?xml version="1.0" encoding="utf-8" ?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<VideoView
android:id="+@/Video_View"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
/>
</LinearLayout>