三恼琼、制作VR視頻播放器 (Google VR for Android)

原文地址:
http://blog.csdn.net/qq_24889075/article/details/52133170
http://www.reibang.com/p/82163453ed30

相關(guān)閱讀:
一、初識GVR (Google VR for Android):http://www.reibang.com/p/09c0822b9d1e
二糟需、制作VR全景圖播放器 (Google VR for Android):http://www.reibang.com/p/104251a3153d

simplevideowidget

如果沒有看上一篇文章的請先看完再來看這一篇吧止潮,有寫重復(fù)的就不介紹了

AndroidManifest

上一篇文章有提到,其實(shí)這里也沒有什么特別的

build.gradle

《初識GVR》 那篇文章有介紹到這些庫

dependencies {
    compile project(':libraries-common')
    compile project(':libraries-commonwidget')
    compile project(':libraries-videowidget')
}

布局文件

里面就一個(gè)主要標(biāo)簽

 <com.google.vr.sdk.widgets.video.VrVideoView
            android:id="@+id/video_view"
            android:layout_width="match_parent"
            android:layout_height="250dip"
            android:scrollbars="@null" />

SimpleVrVideoActivity

更改過的代碼:

package com.google.vr.sdk.samples.simplevideowidget;

import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;

import com.google.vr.sdk.widgets.video.VrVideoEventListener;
import com.google.vr.sdk.widgets.video.VrVideoView;

import java.io.IOException;

public class SimpleVrVideoActivity extends Activity {
    private static final String TAG = "SimpleVrVideoActivity";
 
    private String fileUri = "congo.mp4";//assets文件夾下的文件名
    private VideoLoaderTask backgroundVideoLoaderTask;//異步加載視頻

    private VrVideoView videoWidgetView;//Google提供給我們現(xiàn)實(shí)播放VR視頻的View

    private boolean isPaused = false;//標(biāo)記是否暫停

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_layout);

        videoWidgetView = (VrVideoView) findViewById(R.id.video_view);//初始化VrVideoView
        videoWidgetView.setEventListener(new ActivityEventListener());//為VrVideoView添加監(jiān)聽

        //如果有任務(wù)在執(zhí)行則停止它
        if (backgroundVideoLoaderTask != null) {
            backgroundVideoLoaderTask.cancel(true);
        }
        //創(chuàng)建一個(gè)任務(wù)
        backgroundVideoLoaderTask = new VideoLoaderTask();
        //執(zhí)行任務(wù)燥爷。將視頻文件名(根據(jù)項(xiàng)目實(shí)際情況傳吧)傳入
        backgroundVideoLoaderTask.execute(fileUri);
    }


    private void togglePause() {
        if (isPaused) {
            videoWidgetView.playVideo();//播放
        } else {
            videoWidgetView.pauseVideo();//暫停
        }
        isPaused = !isPaused;
    }


    private class ActivityEventListener extends VrVideoEventListener {

        @Override
        public void onLoadSuccess() {//加載成功
            Log.i(TAG, "Sucessfully loaded video " + videoWidgetView.getDuration());
        }

        @Override
        public void onLoadError(String errorMessage) {//加載失敗
            Log.e(TAG, "Error loading video: " + errorMessage);
        }

        @Override
        public void onClick() {//當(dāng)我們點(diǎn)擊了VrVideoView時(shí)候觸發(fā)
            togglePause();
        }

        @Override
        public void onNewFrame() {//一個(gè)新的幀被繪制到屏幕上。
        }

        @Override
        public void onCompletion() {//視頻播放完畢懦窘。
            videoWidgetView.seekTo(0);//移動(dòng)到視頻開始
        }
    }

    class VideoLoaderTask extends AsyncTask<String, Void, Boolean> {
        @Override
        protected Boolean doInBackground(String... uri) {
            try {
                videoWidgetView.loadVideoFromAsset(uri[0]);//加載視頻文件
            } catch (IOException e) {//視頻文件打開失敗
                Log.e(TAG, "Could not open video: " + e);
            }

            return true;
        }
    }


    @Override
    protected void onPause() {
        super.onPause();
        videoWidgetView.pauseRendering();//暫停3D渲染和跟蹤
        isPaused = true;
    }

    @Override
    protected void onResume() {
        super.onResume();
        videoWidgetView.resumeRendering();//恢復(fù)3D渲染和跟蹤前翎,但官方文檔上面沒有寫
    }

    @Override
    protected void onDestroy() {
        videoWidgetView.shutdown();//關(guān)閉渲染并釋放相關(guān)的內(nèi)存
        super.onDestroy();
    }
}

上面用的方法全都是來源于VrVideoView這個(gè)類中,下面介紹一下 示例代碼中沒有出現(xiàn)的方法畅涂。

  1. getDuration()//獲取視頻的持續(xù)時(shí)間(毫秒為單位)

  2. getCurrentPosition() //獲取的視頻的當(dāng)前位置(毫秒為單位)

  3. loadVideo(URI uri)//加載從給定的URI的全景視頻

    URI可以是:
    相對文件到盤的根港华,例如“/sdcard/FILENAME.MP4”。如果視頻是APK的資產(chǎn)的一部分午衰,loadVideoFromAsset(String, VrVideoView.Options)應(yīng)改為使用立宜。
    遠(yuǎn)程URL以HTTP或HTTPS方案,如“http://foo.com/file.mp4”臊岸。HLS URL(如“http://foo.com/file.m3u8”)的支持橙数,但需要正確的輸入格式在要設(shè)置VrVideoView.Options的對象。

疑問

如果是我的操作有問題請指正帅戒,避免誤導(dǎo)其他讀者 _

在官方文檔中是有VrVideoView.Options這個(gè)類的

官方文檔顯示有這個(gè)類

然而我在VrVideoView中并沒有發(fā)現(xiàn)Options這個(gè)類灯帮,因?yàn)槲疫M(jìn)行了以下操作 來證實(shí)這個(gè)說法。
1蜘澜、 無法導(dǎo)入包


無法導(dǎo)入包

2施流、無法創(chuàng)建類


無法創(chuàng)建類

3响疚、在VrVideoView類中搜索不到Options


搜索不到Options

4鄙信、VrVideoView的loadVideoFromAsset方法沒有文檔中的第二個(gè)參數(shù)


文檔中有Options

實(shí)際類中沒有Options

我是2016.8.3下載的,不知道以后會(huì)不會(huì)更新文檔忿晕,或者進(jìn)行別的操作装诡。

既然Options類無法找到就不在這里根據(jù)文檔描述了。

總結(jié)

1. 導(dǎo)入google的庫
2. 在相應(yīng)的布局文件中引入控件 com.google.vr.sdk.widgets.pano.VrPanoramaView
3. 初始化控件
4. 調(diào)用VrPanoramaView的loadImageFromBitmap方法或者loadVideo方法
5. 在onPause践盼、onResume鸦采、onDestroy中做出相應(yīng)處理

好了,這篇就到這吧咕幻。如果有機(jī)會(huì)的話會(huì)繼續(xù)分享一些關(guān)于 源碼分析渔伯、自定義VR視頻播放器自定義全景圖片播放器 等一些進(jìn)階文章肄程。

朋友們?nèi)绻毙枰脑捑土粞月嗪穑铱匆娏藭?huì)加快速度


原文地址:
http://blog.csdn.net/qq_24889075/article/details/52133170
http://www.reibang.com/p/82163453ed30

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末选浑,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子玄叠,更是在濱河造成了極大的恐慌古徒,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,036評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件读恃,死亡現(xiàn)場離奇詭異隧膘,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)寺惫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評論 3 395
  • 文/潘曉璐 我一進(jìn)店門疹吃,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人西雀,你說我怎么就攤上這事互墓。” “怎么了蒋搜?”我有些...
    開封第一講書人閱讀 164,411評論 0 354
  • 文/不壞的土叔 我叫張陵篡撵,是天一觀的道長。 經(jīng)常有香客問我豆挽,道長育谬,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,622評論 1 293
  • 正文 為了忘掉前任帮哈,我火速辦了婚禮膛檀,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘娘侍。我一直安慰自己咖刃,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,661評論 6 392
  • 文/花漫 我一把揭開白布憾筏。 她就那樣靜靜地躺著嚎杨,像睡著了一般。 火紅的嫁衣襯著肌膚如雪氧腰。 梳的紋絲不亂的頭發(fā)上枫浙,一...
    開封第一講書人閱讀 51,521評論 1 304
  • 那天,我揣著相機(jī)與錄音古拴,去河邊找鬼箩帚。 笑死,一個(gè)胖子當(dāng)著我的面吹牛黄痪,可吹牛的內(nèi)容都是我干的紧帕。 我是一名探鬼主播,決...
    沈念sama閱讀 40,288評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼桅打,長吁一口氣:“原來是場噩夢啊……” “哼是嗜!你這毒婦竟也來了轻纪?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,200評論 0 276
  • 序言:老撾萬榮一對情侶失蹤叠纷,失蹤者是張志新(化名)和其女友劉穎刻帚,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體涩嚣,經(jīng)...
    沈念sama閱讀 45,644評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡崇众,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,837評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了航厚。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片顷歌。...
    茶點(diǎn)故事閱讀 39,953評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖幔睬,靈堂內(nèi)的尸體忽然破棺而出眯漩,到底是詐尸還是另有隱情,我是刑警寧澤麻顶,帶...
    沈念sama閱讀 35,673評論 5 346
  • 正文 年R本政府宣布赦抖,位于F島的核電站,受9級特大地震影響辅肾,放射性物質(zhì)發(fā)生泄漏队萤。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,281評論 3 329
  • 文/蒙蒙 一矫钓、第九天 我趴在偏房一處隱蔽的房頂上張望要尔。 院中可真熱鬧,春花似錦新娜、人聲如沸赵辕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽还惠。三九已至,卻和暖如春旁钧,著一層夾襖步出監(jiān)牢的瞬間吸重,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評論 1 269
  • 我被黑心中介騙來泰國打工歪今, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人颜矿。 一個(gè)月前我還...
    沈念sama閱讀 48,119評論 3 370
  • 正文 我出身青樓寄猩,卻偏偏與公主長得像,于是被迫代替她去往敵國和親骑疆。 傳聞我的和親對象是個(gè)殘疾皇子田篇,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,901評論 2 355

推薦閱讀更多精彩內(nèi)容