產品概述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();
}
}
更多內容請關注我的微信公衆賬號:極客峯