安卓视频,听到声音,但没有视频

sly*_*ron 7 video android surfaceview media-player

我尝试了几个不同的例子,但我无法显示任何视频.我听到声音但没有视频.我想也许我只是有一个不正确的视频格式,所以我下载了一个3gp格式的法国商业广告,但仍然没有喜悦.我正在使用带有android sdk的Eclipse Java EE,而我的应用程序的目标是1.5 sdk(Api Level 3)而没有google api.有人可以发布链接到已知在Android中播放的视频或指出我的代码问题.我已经尝试了所有我能想到的...有/没有准备..不同的布局等.

这是我的onCreate活动

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

this.setContentView(R.layout.video_test);
    SurfaceView v = (SurfaceView) findViewById(R.id.surface_video); 
    SurfaceHolder holder = v.getHolder(); 
 // Set the transparency 
    //getWindow().setFormat(PixelFormat.UNKNOWN); 


    // Set a size for the video screen 
    //holder.addCallback(this); 
    holder.setFixedSize(400,300); 


    MediaPlayer mp = MediaPlayer.create(this, R.raw.fiat); 
    mp.setDisplay(holder);
    //mp.setAudioStreamType(2); 
    try {
        //mp.prepare();
        mp.start();
    } catch (IllegalStateException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
Run Code Online (Sandbox Code Playgroud)

她是video_test.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" 
> 
<SurfaceView android:id="@+id/surface_video" 
android:layout_width="250px" 
android:layout_height="250px"> 
</SurfaceView> 
<LinearLayout 
android:orientation="horizontal" 
android:layout_height="wrap_content" 
android:layout_width="fill_parent" 
android:padding="10dip" 
> 
</LinearLayout> 
</LinearLayout> 
Run Code Online (Sandbox Code Playgroud)

> Blockquote

wiz*_*old 17

你必须实现SurfaceHolder.Callback并在进入surfaceCreated后调用方法setDisplay,prepare等.此外,您可能需要将Surface支架的类型更改为SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS.像这样:

import android.view.SurfaceHolder.Callback;

public class TestActivity extends Activity implements Callback {

// ...

    @Override
    public void onCreate(Bundle savedInstanceState) {
        // ...
        mSurfaceView = (SurfaceView)findViewById(R.id.yousurfaceview); 
        holder = mSurfaceView.getHolder();
        holder.addCallback(this);
        holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
    }

@Override
public void surfaceCreated(SurfaceHolder holder) {
    try {
        mp.setDisplay(holder);
        mp.setDataSource(somesource);
        mp.prepare();
        mp.start();
        // etc...
    } catch (IOException e) {
        } catch (IllegalArgumentException e) {
        } catch (IllegalStateException e) {
    }

}

// ...
}
Run Code Online (Sandbox Code Playgroud)

如果你在OnCreate中尝试它,你没有得到任何结果,因为Surface尚未创建...


Com*_*are 1

如果您使用模拟器,它可能无法工作。该模拟器缺乏 Android 设备中可用的硬件加速功能。例如,在 2.6GHz Core 2 Duo 上,我有时可以播放视频,但并非总是如此。在速度较慢的机器上,视频播放永远无法进行。在 2.5GHz Core 2 Quad 上,我总是可以播放视频。话虽这么说,我通常在实际设备上测试视频播放。

我也不确定视频播放是否可以从原始资源进行。我强烈建议您首先尝试使用 SD 卡上文件中的视频。

至于绝对有效的视频,我知道这里的“纪录片和你”和“我们的孙子的音乐”MP4 形式工作。