2011-03-08 6 views
0

저는 현재 역동적 인 멀티미디어 응용 프로그램을하고있는 안드로이드를 처음 접했습니다. 비디오에 액세스하기 위해 포함 된 tappable 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 (file)는 인 텐트를 사용하여 기존 클래스에서 localhost url을 가져 오는 데 사용됩니다.

+0

당신이 당신의 코드를 공유하시기 바랍니다 수 있습니다, 그래서 우리는 의견과 도움을 시도 할 수 있습니다? :-) –

+0

코드를 업데이트했습니다. – RAAAAM

답변

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) { 
    } 
} 
관련 문제