Google Ima SDK, звук воспроизводится, но нет просмотра - PullRequest
0 голосов
/ 07 сентября 2018

Я пытаюсь воспроизвести рекламу на Android с помощью Google IMA sdk. Я использовал пример приложения, чтобы прийти к своему решению, но по какой-то причине я получаю только аудио объявления и оверлей (длина объявления, кнопка «читать дальше» и т. Д.). Видео не воспроизводится или, по крайней мере, невидимо.

Я собираю видеоплеер, используя VideoView:

package eu.myapp.test.views;

import android.media.MediaPlayer;
import android.view.View;
import android.view.ViewGroup;
import android.widget.MediaController;
import android.widget.VideoView;
import android.media.MediaPlayer.OnCompletionListener;
import android.media.MediaPlayer.OnErrorListener;
import android.media.MediaPlayer.OnInfoListener;

import com.facebook.react.uimanager.ThemedReactContext;

import java.util.ArrayList;
import java.util.List;

import eu.myapp.test.controllers.PlayerController;


public class PlayerView extends VideoView {
private PlayerController mPlayerController;

public PlayerView(ThemedReactContext context, PlayerController playerController) {
    super(context);
    mPlayerController = playerController;
    init();
}

private void init() {
    MediaController mediaController = new MediaController(getContext());
    mediaController.setAnchorView(this);
    setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));

    super.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
        @Override
        public void onPrepared(MediaPlayer mp) {
            mp.start();
        }
    });

    super.setOnCompletionListener(new OnCompletionListener() {
        @Override
        public void onCompletion(MediaPlayer mediaPlayer) {
            mediaPlayer.reset();
            reset();
        }
    });


    super.setOnErrorListener(new OnErrorListener() {
        @Override
        public boolean onError(MediaPlayer mp, int what, int extra) {
            mp.reset();
            reset();

            return true;
        }
    });

    super.setOnInfoListener(new OnInfoListener() {
        @Override
        public boolean onInfo(MediaPlayer mp, int what, int extra) {
            // When video starts, make progressbar visible and spinner invisible
            if (MediaPlayer.MEDIA_INFO_VIDEO_RENDERING_START == what) {
                mPlayerController.setProgressBarVisibility(View.VISIBLE);
                mPlayerController.setPlaceholderVisibility(View.GONE);
                mPlayerController.setAdSpinnerVisibility(View.GONE);
                return true;
            }

            return false;
        }
    });

    mPlayerController.addPlayerView(this);
}

public void play() {
    start();
}

public void reset() {
    mPlayerController.setProgressBarVisibility(View.GONE);
    mPlayerController.setPlaceholderVisibility(View.VISIBLE);
    mPlayerController.setAdSpinnerVisibility(View.VISIBLE);
    mPlayerController.onVideoComplete();
}
}

Кто-нибудь знаком с этой проблемой?

РЕДАКТИРОВАТЬ: после завершения я получаю

ошибка состояния игрока (-38, 0).

Но я сомневаюсь, что это проблема, так как она не работает с самого начала.

Проблема не возникает или встречается редко на некоторых устройствах. Хотя это всегда появляется на других устройствах.

1 Ответ

0 голосов
/ 10 сентября 2018

Исправлено. У меня был SurfaceView для моего обычного видео и VideoView для рекламы. SurfaceView отображался поверх VideoView, что делало рекламу невидимой.

...