从原始文件夹播放视频

时间:2011-01-02 22:17:25

标签: android

晚上,

我刚刚开始使用android进行编程,并制作了一些程序和所有内容,所以我仍然是一个新手,但我试图理解这一切。

所以这是我的问题,我正在尝试播放一个视频,事实是,当我通过互联网从VideoView上传输它或者当我放入我的SD卡时,我得到了它。

我现在要做的是播放我在res / raw文件夹中的视频,但它只播放音频,我不明白为什么,它在我的logcat中没有给出任何错误我可以看到,也无法真正找到谷歌的解决方案,因为大多数答案都是关于VideoView的,只是把视频放在你的SD卡上。

现在有人告诉我,我必须使用setDisplay(SurfaceHolder),我也尝试过,但我仍然只能获得音频。

我希望有人能帮助我找到解决这个问题的方法。

VideoDemo.java

package nl.melvin.videodemo; 

import android.app.Activity; 
import android.os.Bundle; 
import android.media.MediaPlayer; 
import android.view.SurfaceHolder; 
import android.view.SurfaceView; 


public class videodemo extends Activity { 

    public SurfaceHolder holder; 
    public SurfaceView surfaceView; 


    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 


        MediaPlayer mp = MediaPlayer.create(this, R.raw.mac); 

        mp.setDisplay(holder); 
        mp.start(); 

      } 

} 

XML

<?xml version="1.0" encoding="utf-8"?> 

<LinearLayout  
    xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/LinearLayout01"  
     android:layout_width="fill_parent"  
     android:layout_height="fill_parent" > 
    <SurfaceView 
        android:id="@+id/surfaceview" 
         android:layout_width="fill_parent" 
         android:layout_height="fill_parent"> 
     </SurfaceView>> 
</LinearLayout>

我也尝试过Uri.parse,但它说无法播放视频(.mp4格式)。

3 个答案:

答案 0 :(得分:7)

我遇到了同样的问题但仍然无法加载视频(只有声音)。 但是我这样做了:

    getWindow().setFormat(PixelFormat.TRANSLUCENT);
    videoView = new VideoView(this);
    videoView.setMediaController(new MediaController(this));
    videoView.setVideoURI(Uri.parse("android.resource://pt.beware.smdemo/" + R.raw.video));
    videoView.requestFocus();
    videoView.start();
    setContentView(videoView);

答案 1 :(得分:0)

尝试在XML文件中使用VideoView而不是SurfaceView。 VideoView专门扩展SurfaceView以处理视频 - SurfaceView不知道如何做到这一点。

查看VideoView

的类层次结构

然后你应该能够把持有人当作......

mp.setDisplay(surfaceView.getHolder());

此外,您的代码不会显示您在...中分配对surfaceView的引用

surfaceView = (SurfaceView) findViewById(R.id.surfaceView);

...为了完整起见,如果您使用VideoView,则更改代码中的类类型和变量名称以及XML中的Id名称。

答案 2 :(得分:0)

mp.setDisplay(surfaceView.getHolder());

此外,您的代码不会显示您为SurfaceView分配引用,如:

surfaceView = (SurfaceView) findViewById(R.id.surfaceView);

并且为了完整起见,如果您使用VideoView,则更改代码中的类类型和变量名称以及XML中的Id名称。