2011-03-08 58 views
0

我是新来的android,目前正在做动态多媒体应用程序。用于访问视频,包含可点击的SurfaceView。每当从本地主机服务器播放视频时,只有声音可见,没有视觉。我不知道为什么会发生这种情况,谁能指导我如何形象化视频。表面视图问题

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(文件)用于使用intent从现有类获取localhost url。

+0

能否请您分享您的代码,所以我们可以发表评论,并尽力帮助? :-) – 2011-03-08 06:53:53

+0

我更新了代码。 – RAAAAM 2011-03-08 07:09:13

回答

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) { 
    } 
}