Android使用得圖SDK開發VR播放器

產品概述html

Android SDK包含全景圖片、VR視頻、漫遊主題等多種展現方式,支持小行星模式、陀螺儀、VR雙屏沉浸式觀看。文件下載、解碼都在播放器中完成,您只需一個連接地址或是一條配置便可展示炫酷的全景效果。android

注: 該SDK支持不低於4.0.0的Android版本(api14)。api

下載並集成SDK緩存

下載SDK最新版微信

下載最新版panoplay_android_jar SDK,解壓SDK壓縮包,將panoplay_android_jar文件夾中的'libs'和'res/raw'文件夾複製到你的項目工程根目錄下(如使用'ADT 17'如下用戶須要手動添加'libs'下的jar文件到工程Path中)。網絡

sdk包下載ide

demo下載函數

AndroidManifest配置佈局

增長權限ui

<uses-permission android:name="android.permission.INTERNET"/>

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

配置最低可運行版本

  <uses-sdk

        android:minSdkVersion="14"

        android:targetSdkVersion="21"   />

在manifest根節點配置OpenGL版本: <uses-feature android:glEsVersion="0x00020000" android:required="true"/>

爲了達到最好的播放效果建議開啓硬件加速:在Application節點中聲明android:hardwareAccelerated="true"

初始化配置

因爲本播放器使用universal-image-loader類庫來管理圖片,所以首先要在Application中初始化ImageLoader,若在您的項目中已使用到了該類庫,只需保證 DisplayImageOptions 中bitmapConfig爲Bitmap.Config.ARGB_8888類型,imageScaleType爲ImageScaleType.NONE,而且開啓了內存和磁盤緩存。 沒有配置過的能夠按如下方式配置:

DisplayImageOptions defaultOptions = new DisplayImageOptions.Builder()

    .imageScaleType(ImageScaleType.NONE)

    .cacheInMemory(true)

    .cacheOnDisk(true)

    .build();

ImageLoaderConfiguration config = new ImageLoaderConfiguration

    .Builder(this)

    .defaultDisplayImageOptions(defaultOptions)

    .threadPriority(Thread.NORM_PRIORITY - 2)

    .denyCacheImageMultipleSizesInMemory()

    .discCacheFileNameGenerator(new Md5FileNameGenerator())

    .tasksProcessingOrder(QueueProcessingType.FIFO)

    .build();

ImageLoader.getInstance().init(config);

播放器引入

佈局文件引用

播放器須要藉助com.player.renderer.PanoPlayerSurfaceView(繼承自android.opengl.GLSurfaceView)類來播放全景圖片和視頻,您能夠根據須要自定義他的寬高和位置,還能夠再繼承自 PanoPlayerSurfaceView 根據需求自定義點擊事件和滑動事件。

函數調用

建立播放渲染器:

播放器須要藉助 com.player.panoplayer.PanoPlayer(PanoPlayerSurfaceView view, Context context)來控制OpenGL渲染。 首先獲取佈局文件播放器:

PanoPlayerSurfaceView ppsview;

建立渲染器並和播放器綁定:

PanoPlayer renderer=new PanoPlayer(ppsview, this);

ppsvVideo.setRenderer(renderer);

建立播放文件連接:

建立播放連接類PanoPlayerUrl加載文件 PanoPlayerUrl panoplayerurl = new PanoPlayerUrl();

加載視頻或圖像

加載視頻或圖像有三種方法:

1) 經過網絡地址直接加載

加載視頻方法: panoplayerurl.SetVideoUrlImage("視頻地址","");

加載六面圖方法: panoplayerurl.SetCubeUrlImage("六面圖地址","六面圖的預覽圖") 其中六面圖的地址輸入格式爲:http://fwpano813.img.detuyun.cn/143461522655827dbad040a/oper/59gv8ty1gte1p9l2_html_%s.jpg 後面以%s結尾; 訪問時可把%s換成f(/u/b/l/r/d);

加載2:1全景圖方法: panoplayerurl.SetSphereUrlImage("2:1圖的地址","");

2) 經過加載Xml文件: panoplayerurl. setXmlUrl("xml文件")

3) 經過構造xml加載:如構造一個魚眼視頻的xml

String T = 

"<DetuVr>

    <settings init=\"pano1\" initmode=\"default\"  "+"enablevr=\"false\" title=\"\" />      <scenes>

        <scene name=\"pano1\" title=\"\"  "+ "thumburl=\"\">

        <preview url=\"%s\" type=\"CUBESTRIP\"></preview>

        <image type=\"%s\" "+ "url=\"%s\" degree=\"%d\" device=\"%d\"/>

        </scene>

    </scenes>

</DetuVr>";

初始化XML配置

 String xmlstring = String.format(T,"","video", "須要加載的地址", 240,1);

   //[type=video,degree =240(魚眼度數),device=1(魚眼設備類型)]

加載xml

panoplayerurl.setXmlContent(xmlstring);

開始播放

renderer.Play(panoplayerurl);

注: 可以使用的文件路徑規則:

"http://site.com/image.png" // from Web

"file:///mnt/sdcard/image.png" // from SD card

"assets://image.png" // from assets

"drawable://" + R.drawable.img // from drawables

播放回調函數調用

播放圖片回調:

在播放圖片時可經過IPanoPlayerListener接口綁定播放事件:

renderer.setListener(IPanoPlayerListener listener);

播放視頻回調:

在播放視頻時需同時綁定IPanoPlayerListener和IPanoPlayerVideoPluginListener接口才可獲取到完整的播放事件:

renderer.setListener(IPanoPlayerListener listener);

renderer.setVideoPluginListener(IPanoPlayerVideoPluginListener listener);

播放回調說明:

回調接口

包含回調

回調說明

IPanoPlayerListener

void PanoPlayOnLoading()

播放器數據正在加載中

 

void PanoPlayOnLoaded()

播放器數據加載完成

 

void PanoPlayOnEnter(PanoramaData var1)

播放器場景加載完成

 

void PanoPlayOnLeave(PanoramaData var1);

播放器場景已移除

 

void PanoPlayOnError(PanoPlayerErrorCode var1)

播放出錯

IPanoPlayerVideoPluginListener

void PluginVideoOnInit()

播放器數據初始化完成

 

void PluginVideoOnStatusChanged(PanoVideoPluginStatus status)

播放狀態變化

 

void PluginVideoOnProgressChanged(int curTime, int bufTime, int maxTime)

播放進度變化。其中curTime爲當前播放的位置;bufTime爲緩衝位置;maxTime爲視頻總長度

 

void PluginVideoOnSeekFinished()

視頻進度拖動完成

 

void PluginVideOnPlayerError(PanoPlayerErrorStatus var1, String var2)

播放出錯

模式切換

在播放圖片和視頻時還可進行模式切換,有兩種方式: 直接切換和漸變切換,您可根據須要選擇其中一種。

直接切換:renderer.setViewMode(ViewMode mode);

漸變切換 : prenderer.setAnimationViewMode(ViewMode mode);

模式說明

模式

說明

ViewMode.VIEWMODE_FISHEYE

魚眼模式

ViewMode.VIEWMODE_LITTLEPLANET

小行星模式

ViewMode.VIEWMODE_DEF

默認模式

ViewMode.VIEWMODE_PLANE

平面模式

ViewMode.VIEWMODE_VR

VR 模式

其餘設置

設置陀螺儀開關

可調用renderer.setGyroEnable(boolean enable);來設置播放器是否使用陀螺儀:enable 爲true 時,陀螺儀可用;爲false 時,陀螺儀不可用。

視頻播放進度控制

在視頻播放過程當中還可進行視頻播放控制。在public void PluginVideoOnInit()函數中獲取播放器插件控制器:

@Override

    public void PluginVideoOnInit() {

        Plugin plugin = renderer.getCurPlugin();

        if (plugin instanceof VideoPlugin) {

            videoplugin = (VideoPlugin) plugin;

            //設置播放器日誌級別

            //videoplugin.setLogLevel(IjkMediaPlayer.IJK_LOG_VERBOSE);

        }

    }

從某一時刻開始播放:

videoplugin.seekTo(int progress);

獲取播放緩衝百分比:

int buffr = videoplugin.getreadBufferingPercent();

暫停播放:

videoplugin.pause();

開始播放:

videoplugin.start();

從新播放:

videoplugin.replayer();

注意事項

爲了更好的管理播放器資源引用,您需在您的onDestroy() 方法手動銷燬播放器,釋放播放資源。

    @Override

    protected void onDestroy() {

        super.onDestroy();

        if (renderer != null) {

            renderer.release();

        }

    }

 

        更多內容請關注我的微信公衆賬號:極客峯        

相關文章
相關標籤/搜索