ストリームの再生方法にのみ興味があったので、 googletv-video-playerの例をダウンロードし、VideoPlayerActivityのみを選択しました。
フルスクリーンモードでビデオを再生するようにxmlファイルとjavaファイルを変更しました。
これが私が今持っているものです:
player.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="fill_parent" android:layout_width="fill_parent" android:padding="10dp">
<VideoView android:id="@+id/videoViewFullScreen"
android:layout_width="fill_parent" android:layout_height="fill_parent"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:layout_alignParentBottom="true"/>
</RelativeLayout>
player.java
public class player extends Activity implements
AudioManager.OnAudioFocusChangeListener,
MediaPlayer.OnCompletionListener, MediaPlayer.OnErrorListener {
public static final String TAG = "VPActivity";
public VideoView mVideoView = null;
// Handle AudioFocus issues
public void onAudioFocusChange(int focusChange) {
switch (focusChange) {
case AudioManager.AUDIOFOCUS_GAIN:
Log.i(TAG, "AF Gain");
if (mVideoView != null)
mVideoView.resume();
break;
case AudioManager.AUDIOFOCUS_LOSS:
Log.i(TAG, "AF Loss");
if (mVideoView != null)
mVideoView.stopPlayback();
mVideoView = null;
this.finish(); // Let's move on.
break;
case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT:
case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK:
Log.i(TAG, "AF Transient");
if (mVideoView != null)
mVideoView.pause();
break;
}
}
public void onCompletion(MediaPlayer mp) {
Log.i(TAG, "done.");
mVideoView = null;
this.finish();
}
public boolean onError(MediaPlayer mp, int what, int extra) {
Log.e(TAG, "IO Error e=" + what + " x=" + extra);
return false; // Will call onCompletion
}
@Override
public void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Request Audio Focus
AudioManager am = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
int result = am.requestAudioFocus(this, AudioManager.STREAM_MUSIC,
AudioManager.AUDIOFOCUS_GAIN);
if (result != AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
Log.e(TAG, "Can't get AudioFocus " + result);
this.finish(); // Just give up.
}
//added the following to make video large, hide title and keep activity alive
//---------------------------------------------------------------------------
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
//----------------------------------------------------------------
setContentView(R.layout.player);
mVideoView = (VideoView) findViewById(R.id.videoViewFullScreen);
mVideoView.setVideoPath("rtsp://stream-url");
mVideoView.setOnCompletionListener(this);
mVideoView.setOnErrorListener(this);
MediaController mc = new MediaController(this, true);
mc.setMediaPlayer(mVideoView);
mc.setAnchorView(mVideoView);
mVideoView.setMediaController(mc);
mVideoView.requestFocus();
mVideoView.start();
}
}
今私は2つの問題を抱えています
One on Motorola Xoom Tablet and
Second on Google TV
タブレットでの問題(Androidバージョン:4.0.3) これは小さな問題です。タブレットはビデオのストリーミングを適切に開始します。ビデオを15〜20分間完全に再生します。しかし、しばらくすると、ビデオの再生が停止します。画面をタップして状態を確認したところ、プレーヤーが自動的に停止していることに気づきました。
Playをもう一度タップすると、ストリームの再生が完全に始まりました。なぜ自動的に停止するのですか?
Google TVでの問題(Androidバージョン:3.1)
これはもっと深刻な問題です。最初に、グーグルテレビはそれをまったく再生していなかったので、私に次のエラーが出ました:
Cannot Play Video
-----------------------------------------
Sorry, this video cannot be played.
編集:今、この問題は消えて、ビデオが再生されます....私は何もしませんでした。しかし、あなたはそれがそのように振る舞っていましたか?
問題は、Google TV画面の左上隅にビデオの1/4の部分しか表示されず、残りのビデオが非表示になっていることです。VideoViewオブジェクトが引き伸ばされ、他のオブジェクトがその上にあるかのように左上隅にウィンドウを開き、VideoViewを非表示にします
そして、プレイヤーのアクティビティは自動的に終了します。
ビデオはエミュレーターとタブレットでも再生されるため、エミュレーターによって生成されたエラー(エラーがないため)をLogCatから貼り付けることはできません。
私のAndroidアプリケーションはAndroid3.1ライブラリで構築されています