表面视图得到问题

时间:2011-03-08 06:46:15

标签: android

我是android的新手,目前正在做动态多媒体应用。对于访问视频,包括可点击的SurfaceView。每当从localhost服务器播放视频时,只有声音可见,没有视觉效果。我不确定为什么会这样,任何人都可以指导我如何可视化视频。

if (player == null) {
            player = new MediaPlayer();
            player.setScreenOnWhilePlaying(true);



        } else {
            player.stop();
            player.reset();
        }

        player.setDataSource(file);
        player.setDisplay(holder);
        player.prepareAsync();
        //player.setOnBufferingUpdateListener(this);
        player.setOnCompletionListener(this);
        player.setOnPreparedListener(this);
        player.setOnVideoSizeChangedListener(this);
        player.setAudioStreamType(AudioManager.STREAM_MUSIC);

这里setDataSoruce(file)用于使用intent从现有类中获取localhost url。

1 个答案:

答案 0 :(得分:1)

查看我的Surface View - Playing视频教程

public class VideoAssetActivity extends Activity implements     
                                            TextureView.SurfaceTextureListener {
// Log tag.
private static final String TAG = VideoAssetActivity.class.getName();

// Asset video file name.
private static final String FILE_NAME = "big_buck_bunny.mp4";

// MediaPlayer instance to control playback of video file.
private MediaPlayer mMediaPlayer;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.texture_video_simple);

        initView();
    }

    private void initView() {
        TextureView textureView = (TextureView) findViewById(R.id.textureView);
        textureView.setSurfaceTextureListener(this);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (mMediaPlayer != null) {
            mMediaPlayer.stop();
            mMediaPlayer.release();
            mMediaPlayer = null;
        }
    }

    @Override
    public void onSurfaceTextureAvailable(SurfaceTexture surfaceTexture, int i, int i2) {
    Surface surface = new Surface(surfaceTexture);

        try {
            AssetFileDescriptor afd = getAssets().openFd(FILE_NAME);
            mMediaPlayer = new MediaPlayer();
            mMediaPlayer.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
            mMediaPlayer.setSurface(surface);
            mMediaPlayer.setLooping(true);
            mMediaPlayer.prepareAsync();

            // Play video when the media source is ready for playback.
            mMediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                @Override
                public void onPrepared(MediaPlayer mediaPlayer) {
                    mediaPlayer.start();
                }
            });

        } catch (IllegalArgumentException e) {
            Log.d(TAG, e.getMessage());
        } catch (SecurityException e) {
            Log.d(TAG, e.getMessage());
        } catch (IllegalStateException e) {
            Log.d(TAG, e.getMessage());
        } catch (IOException e) {
            Log.d(TAG, e.getMessage());
        }
    }

    @Override
    public void onSurfaceTextureSizeChanged(SurfaceTexture surfaceTexture, int i, int i2) {
    }

    @Override
    public boolean onSurfaceTextureDestroyed(SurfaceTexture surfaceTexture) {
        return true;
    }

    @Override
    public void onSurfaceTextureUpdated(SurfaceTexture surfaceTexture) {
    }
}