2012-06-19 2 views
0

저는 지금 당분간 Google TV 프로그래밍에 관심이있어 막 시작했습니다.마운트 된 드라이브에서 영화 재생 (Revue/GoogleTV)

첫 번째 개인 프로젝트는 기본 미디어 플레이어가 너무 끔찍하기 때문에 간단한 미디어 플레이어와 파일 브라우저를 만드는 것입니다. Android 에뮬레이터 (버전 12)에서는 완벽하게 작동하지만 Google Revue에 설치하면 두 가지 주요 문제가 발생합니다.

1)에 관계없이 항상 선택되는 영화 파일 (형식 및 모든 경로가 올바른지. URI 내가하려고 할 때마다 setDataSource/setVideoPath)

2)에로드 순으로 첫 번째 동영상을 재생하지 않습니다 플레이어 빨리 감기 영화를 통해, 그것은 알파벳 대신 다음 동영상으로 건너 뜁니다

내가 여기에 안드로이드 개발 웹 사이트에서 MediaPlayer를하고 VideoView를 지켜 보면서 예제를 사용했다

: http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/media/index.html 뿐만 아니라 기본 ACTION_VIEW 의도지만, 동일한 문제와이 매 하나마다. 영화는 에뮬레이터에서 100 % 정상적으로 재생되지만 Google Revue에서 완전히 다른 기본값을 갖습니다.

누구든지이 문제가 발생하기 전에 또는 내가 무엇을 할 수 있는지/내가 그것을 고칠 수있는 곳이 있습니까? 여기 MediaPlayer를 실행하려면 코드가

Intent intent = new Intent(getBaseContext(), myMediaPlayer.class); 
intent.putExtra("PATH_ID", path); 
startActivity(intent); 

입니다 :

편집은 여기에서 활동을 호출하는 내 코드입니다. 대안으로 (웹 사이트의 코드의 거의 정확한 사본)

public class myMediaPlayer extends Activity implements 
    OnBufferingUpdateListener, OnCompletionListener, 
    OnPreparedListener, OnVideoSizeChangedListener, SurfaceHolder.Callback { 

private static final String TAG = "MediaPlayerDemo"; 
private int mVideoWidth; 
private int mVideoHeight; 
private MediaPlayer mMediaPlayer; 
private SurfaceView mPreview; 
private SurfaceHolder holder; 
private String path; 
private String extras; 

private boolean mIsVideoSizeKnown = false; 
private boolean mIsVideoReadyToBePlayed = false; 

/** 
* 
* Called when the activity is first created. 
*/ 
@Override 
public void onCreate(Bundle icicle) { 
    super.onCreate(icicle); 
    setContentView(R.layout.mediaplayer); 
    mPreview = (SurfaceView) findViewById(R.id.surface); 
    holder = mPreview.getHolder(); 
    holder.addCallback(this); 
    holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 
    extras = getIntent().getExtras().getString("PATH_ID");; 

} 

private void playVideo(String filePath) { 
    doCleanUp(); 
    try { 


     path = filePath; 
     // Create a new media player and set the listeners 
     mMediaPlayer = new MediaPlayer(); 
     mMediaPlayer.setDataSource(path); 
     mMediaPlayer.setDisplay(holder); 
     mMediaPlayer.prepare(); 
     mMediaPlayer.setOnBufferingUpdateListener(this); 
     mMediaPlayer.setOnCompletionListener(this); 
     mMediaPlayer.setOnPreparedListener(this); 
     mMediaPlayer.setOnVideoSizeChangedListener(this); 
     mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 


    } catch (Exception e) { 
     Log.e(TAG, "error: " + e.getMessage(), e); 
    } 
} 

public void onBufferingUpdate(MediaPlayer arg0, int percent) { 
    Log.d(TAG, "onBufferingUpdate percent:" + percent); 

} 

public void onCompletion(MediaPlayer arg0) { 
    Log.d(TAG, "onCompletion called"); 
} 

public void onVideoSizeChanged(MediaPlayer mp, int width, int height) { 
    Log.v(TAG, "onVideoSizeChanged called"); 
    if (width == 0 || height == 0) { 
     Log.e(TAG, "invalid video width(" + width + ") or height(" + height + ")"); 
     return; 
    } 
    mIsVideoSizeKnown = true; 
    mVideoWidth = width; 
    mVideoHeight = height; 
    if (mIsVideoReadyToBePlayed && mIsVideoSizeKnown) { 
     startVideoPlayback(); 
    } 
} 

public void onPrepared(MediaPlayer mediaplayer) { 
    Log.d(TAG, "onPrepared called"); 
    mIsVideoReadyToBePlayed = true; 
    if (mIsVideoReadyToBePlayed && mIsVideoSizeKnown) { 
     startVideoPlayback(); 
    } 
} 

public void surfaceChanged(SurfaceHolder surfaceholder, int i, int j, int k) { 
    Log.d(TAG, "surfaceChanged called"); 

} 

public void surfaceDestroyed(SurfaceHolder surfaceholder) { 
    Log.d(TAG, "surfaceDestroyed called"); 
} 


public void surfaceCreated(SurfaceHolder holder) { 
    Log.d(TAG, "surfaceCreated called"); 
    playVideo(extras); 


} 

@Override 
protected void onPause() { 
    super.onPause(); 
    releaseMediaPlayer(); 
    doCleanUp(); 
} 

@Override 
protected void onDestroy() { 
    super.onDestroy(); 
    releaseMediaPlayer(); 
    doCleanUp(); 
} 

private void releaseMediaPlayer() { 
    if (mMediaPlayer != null) { 
     mMediaPlayer.release(); 
     mMediaPlayer = null; 
    } 
} 

private void doCleanUp() { 
    mVideoWidth = 0; 
    mVideoHeight = 0; 
    mIsVideoReadyToBePlayed = false; 
    mIsVideoSizeKnown = false; 
} 

private void startVideoPlayback() { 
    Log.v(TAG, "startVideoPlayback"); 
    holder.setFixedSize(mVideoWidth, mVideoHeight); 
    mMediaPlayer.start(); 
} 

}

, 방금과 같은 기본 플레이어 사용하여 시도 :

Intent intent = new Intent(); 
intent.setAction(android.content.Intent.ACTION_VIEW); 
intent.setDataAndType(Uri.fromFile(new File(aDirectory.getAbsolutePath())), "video/*"); 
startActivity(intent); 

를하지만 항상 첫 번째 재생 선택한 폴더 대신 알파벳 순으로 동영상 검색

+0

여기에 코드를 추가하십시오 ... MediaPlayer의 소스를 설정하고 시작하는 부분 만 추가하십시오. –

답변

관련 문제