Как воспроизвести видео в веб-просмотре с Android? - PullRequest
4 голосов
/ 14 февраля 2011

Я загрузил локальный HTML в SDCard, и в этом HTML я использовал тег:

<video id="myvideo" controls width="120" height="60" poster="img/img01.jpg" src="video/01.mp4"></video>

и затем я обнаружил, что не загружал этот html, когда отключил тег: html работал нормально, и я проверил это на своем Android AVD (2.2)?

Ответы [ 2 ]

8 голосов
/ 14 февраля 2011

В первую очередь заботьтесь о кодировке. Вот статья с рабочим примером и некоторыми рекомендациями по кодированию видео для веб-набора Android.

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

public class InredisChromeClient extends WebChromeClient implements OnCompletionListener, OnErrorListener {
    private InterfazWebInredis interfazWeb; // Use Your WebView instance instead

    private VideoView mCustomVideoView;

    private LinearLayout mContentView;
    private FrameLayout mCustomViewContainer;
    private WebChromeClient.CustomViewCallback mCustomViewCallback;
    private LinearLayout mErrorConsoleContainer;
    static final FrameLayout.LayoutParams COVER_SCREEN_GRAVITY_CENTER = new FrameLayout.LayoutParams(
            ViewGroup.LayoutParams.FILL_PARENT,
            ViewGroup.LayoutParams.FILL_PARENT, Gravity.CENTER);

    public InredisChromeClient(InterfazWebInredis iwi) {
        super();
        this.interfazWeb = iwi;
    }

    public void onShowCustomView(View view, CustomViewCallback callback) {
        // super.onShowCustomView(view, callback);
        if (view instanceof FrameLayout) {
            mCustomViewContainer = (FrameLayout) view;
            mCustomViewCallback = callback;
            mContentView = (LinearLayout) interfazWeb.findViewById(R.id.mainContainer);
            if (mCustomViewContainer.getFocusedChild() instanceof VideoView) {
                mCustomVideoView = (VideoView) mCustomViewContainer.getFocusedChild();
                // frame.removeView(video);
                mContentView.setVisibility(View.GONE);
                mCustomViewContainer.setVisibility(View.VISIBLE);
                interfazWeb.setContentView(mCustomViewContainer);
                mCustomVideoView.setOnCompletionListener(this);
                mCustomVideoView.setOnErrorListener(this);
                mCustomVideoView.start();
            }
        }
    }

    public void onHideCustomView() {
        if (mCustomVideoView == null)
            return;
        // Hide the custom view.
        mCustomVideoView.setVisibility(View.GONE);
        // Remove the custom view from its container.
        mCustomViewContainer.removeView(mCustomVideoView);
        mCustomVideoView = null;
        mCustomViewContainer.setVisibility(View.GONE);
        mCustomViewCallback.onCustomViewHidden();
        // Show the content view.
        mContentView.setVisibility(View.VISIBLE);
    }

    @Override
    public void onCompletion(MediaPlayer mp) {
        mp.stop();
        mCustomViewContainer.setVisibility(View.GONE);
        onHideCustomView();
        interfazWeb.setContentView(mContentView);
    }

    @Override
    public boolean onError(MediaPlayer mp, int what, int extra) {
        interfazWeb.setContentView(R.layout.main);
        return true;
    }
}

Итак, этот код очень вдохновлен исходным кодом браузера для Android .

Ну и поведение это открывает видео в полноэкранном режиме. Я не знаю, возможно ли воспроизвести видео в отдельном кадре на веб-странице. Но это решение помогло мне, я надеюсь, что и вам.

Привет

1 голос
/ 14 февраля 2011

Это должно работать в версиях 2.x, которые вы уже используете.но doc говорит, что тег будет работать, когда браузер работает в полноэкранном режиме.

Есть вероятность, что ваше веб-представление также будет поддерживать его, но оно должно быть полноэкранным.Попробуйте это.(Я не пробовал это, однако)

РЕДАКТИРОВАТЬ: Чтобы сделать просмотр в полноэкранном режиме, вы можете попробовать это:

requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
...