Проблемы при воспроизведении видеопотока с примером googletv-video-player на Google TV - PullRequest
1 голос
/ 28 января 2012

Я скачал пример 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();
}
}

Теперь у меня ДВА выпуска

 One on Motorola Xoom Tablet and
 Second on Google TV

Проблема на планшете (версия Android: 4.0.3) Это небольшая проблема.Планшет начинает потоковую передачу видео правильно.Он воспроизводит видео в течение 15-20 минут отлично.но через некоторое время видео перестает воспроизводиться.Я проверил его состояние, нажав на экран, и понял, что плеер автоматически Остановился .!

enter image description here

Когда я нажал Play снова .. это начало играть поток отлично.Почему он останавливается автоматически ???

Проблема в Google TV (версия Android: 3.1)

Это более серьезная проблема.Сначала Google TV не воспроизводил его вообще, и выдает следующую ошибку:

Cannot Play Video
-----------------------------------------
Sorry, this video cannot be played.

Редактировать: Теперь эта проблема исчезла, и видео воспроизводится .... я сделалничего такого.Но у вас было такое поведение ??

Теперь проблема в том, что экран Google TV показывает только 1/4 часть видео в левом верхнем углу, а оставшееся видео скрыто .... как будто VideoView объект растягивается, в то время как какой-то другой объект находится над ним с открытым окном в левом верхнем углу, и он скрывает VideoView

И действие игрока заканчиваетсяавтоматически.

Видео даже воспроизводится в эмуляторе и планшете, поэтому я не могу вставить ошибку, сгенерированную эмулятором (поскольку там нет ошибок) из LogCat.

Мое приложение для Androidпостроен с библиотекой Android 3.1

1 Ответ

2 голосов
/ 31 января 2012

Я попробовал ваш код в GoogleTV, и он отлично работает. Единственное, что я предлагаю вам изменить для потоковой ссылки, это строка:

 mVideoView.setVideoPath("rtsp://stream-url");

Выше указано для воспроизведения локальных файлов, для потоковой передачи URL используйте следующее:

 mVideoView.setVideoURI(Uri.parse("rtsp://stream-url"));
...