摘要:推薦閱讀封裝之路學習資源分享合集去年在項目中用到了螢石云視頻,它的項目源碼很多,找到有用的代碼很費時間,所以今天寫成文章把集成步驟,預覽功能,雙擊放大,手勢放大功能以及注意事項等分享給大家。
推薦閱讀:
SurfaceView+MediaPlayer封裝之路
Android學習資源分享合集(1)
去年在項目中用到了螢石云視頻,它的項目源碼很多,找到有用的代碼很費時間,所以今天寫成文章把集成步驟,預覽功能,雙擊放大,手勢放大功能以及注意事項等分享給大家。
效果圖如下:
螢石開發平臺地址:
https://open.ys7.com/
點擊"文檔"進入螢石云開發平臺開發文檔使用。
集成步驟:1. 創建應用
首先,你需要在螢石開放平臺官網的 “ 開發者服務-我的應用-應用秘鑰 ” 查看Appkey。
2.安裝 SDK
dependencies { compile "com.hikvision.ezviz:ezviz-sdk:4.5.1" }
3. 配置 Android 權限
4. 配置 build.gradle
defaultConfig { ... targetSdkVersion 22//小于23 ... ndk { abiFilters "armeabi-v7a"http://只支持32位 } } sourceSets { main { jniLibs.srcDirs = ["libs"] } }
注意:
(1).目前提供所有so均為32位,只能在armeabi-v7a引用,所以需要添加
ndk { abiFilters "armeabi-v7a"http://只支持32位 }
(2).targetSdkVersion設置為23及以上,在android6.0系統的手機上會出現沒有權限崩潰的情況,因為android6.0牽扯到Dangerous Permissions問題,如果需要使用高版本,需要自己處理Dangerous Permissions。
5. 配置 AndroidManifest.xml
6.代碼初始化
要在Application中初始化
/** * APP_KEY請替換成自己申請的 */ EZOpenSDK.initLib(this, APP_KEY, "");
代碼混淆直接去看開發文檔,這里就省略了。
7.重要名詞解釋:
1.初始化SDK-initLib,也就是在Application。
EZOpenSDK.initLib(this, APP_KEY,"");
2.獲取AccessToken.
EZOpenSDK.getInstance().setAccessToken("您要填的Token值");
3.您購買的攝像機設備添加在螢石云APP上。(直接在下載APP通過序列號添加)
如果您開發中還要獲取設計列表等等的功能請直接查看螢石云開發平臺文檔。
播放視頻流程及實現代碼:播放流程:
1.初始化EZPlayer調用EZOpenSDK的createPlayer,詳見api;
2.預覽播放成功后可以進行以下操作:錄像、拍照、畫面翻轉、對講、云臺控制、聲音開關、視頻畫面縮放、拖動進度播放,詳見api的EZPlayer,其中設備控制該接口的如云臺控制和鏡頭顯示功能、對講,屬于限制級接口,要優選通過判斷設備的能力集來調用,設備能力集請查看EZDeviceInfo對象的屬性值來判斷具體方法;
3.關于對講功能,如果預覽播放有聲音輸出,則在開啟對講前需要關閉預覽播放的聲音closeSound,關閉對講后開啟預覽播放的聲音openSound,詳見demo;
4.EZOpenSDK中的setVideoLevel設置視頻清晰度(videoLevel),此調節可以在視頻播放前設置也可以在視頻播放成功后設置,視頻播放成功后設置了清晰度需要先停止播放stopRealPlay然后重新開啟播放startRealPlay才能生效;
5.開始播放之后在消息回調中會收到a、成功消息:EZRealPlayConstants.MSG_REALPLAY_PLAY_SUCCESS,b、失敗消息:EZRealPlayConstants.MSG_REALPLAY_PLAY_FAIL,失敗回調時查看errorCode,如果為400035(需要輸入驗證碼)和400036(驗證碼錯誤),則需要開發者自己處理讓用戶重新輸入驗證密碼,并調用setPlayVerifyCode設置密碼,然后重新啟動播放。
實現代碼:
布局主要控件是SurfaceView,SurfaceView的用法大家應該都知道吧,主要實現了implements SurfaceHolder.Callback接口,聲明SurfaceView 對象,并實方法,代碼如下:
private SurfaceView mRealPlaySv = null; private SurfaceHolder mRealPlaySh = null;
mRealPlaySh = mRealPlaySv.getHolder(); mRealPlaySh.addCallback(VideoActivity.this);
@Override public void surfaceCreated(SurfaceHolder holder) { if (mEZPlayer != null) { mEZPlayer.setSurfaceHold(holder); } else { } mRealPlaySh = holder; } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { } @Override public void surfaceDestroyed(SurfaceHolder holder) { if (mEZPlayer != null) { mEZPlayer.setSurfaceHold(null); } mRealPlaySh = null; }
1.初始化EZPlayer,綁定設備,開始播放。
mEZPlayer = YourApplication.getOpenSDK().createPlayer(deviceSerial, cameraNo);//綁定設備 mEZPlayer.setHandler(mHandler); mEZPlayer.setSurfaceHold(mRealPlaySh); mEZPlayer.startRealPlay();//開始播放
2.播放回調
/* 視頻的回調 */ @Override public boolean handleMessage(Message msg) { // Log.e("回調","true+zong"+msg); switch (msg.what) { //播放成功的回調 case EZConstants.EZRealPlayConstants.MSG_REALPLAY_PLAY_SUCCESS: break; } return false; }視頻放大,手勢放大功能
在播放成功的回調里加上 setRealPlaySvLayout();方法,方法的代碼如下:
private void setRealPlaySvLayout() throws InnerException, PlaySDKException { DisplayMetrics dm = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(dm); int whdth = dm.widthPixels; int height = dm.heightPixels; mRealPlayTouchListener.setSacaleRect(Constant.MAX_SCALE, 0, 0, whdth, height); setPlayScaleUI(1, null, null); }
private void setPlayScaleUI(float scale, CustomRect oRect, CustomRect curRect) { if (scale == 1) { try { if (mEZPlayer != null) { mEZPlayer.setDisplayRegion(false, null, null); } } catch (BaseException e) { // TODO Auto-generated catch block e.printStackTrace(); } } else { if (mPlayScale == scale) { try { if (mEZPlayer != null) { mEZPlayer.setDisplayRegion(true, oRect, curRect); } } catch (BaseException e) { // TODO Auto-generated catch block e.printStackTrace(); } return; } try { if (mEZPlayer != null) { mEZPlayer.setDisplayRegion(true, oRect, curRect); } } catch (BaseException e) { // TODO Auto-generated catch block e.printStackTrace(); } } mPlayScale = scale; }強調:
1.必須在onDestory()方法上注銷,否則會報錯,代碼如下:
@Override protected void onDestroy() { super.onDestroy(); if (mEZPlayer != null) { mEZPlayer.release(); } }
2.暫停播放的方法
mEZPlayer.stopRealPlay();
如果有什么不清楚的可以加我公眾號或者加微信,希望對大家有所幫助。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/67626.html
摘要:前言我之前寫過一篇螢石云的集成文章,很多人問我有沒有,今天我再次總結一下,并加個些功能。 前言 我之前寫過一篇螢石云的集成文章,很多人問我有沒有demo, 今天我再次總結一下, 并加個些功能。 集成步驟 視頻預覽播放 視頻放大縮小 視頻的質量切換 截圖 視頻加載細節 之前的文章大家可以看下面的鏈接:https://mp.weixin.qq.com/s/V4... 先看效果圖:sho...
摘要:首先先祝大家國慶節快樂今天距離為我運營公眾號已經一個月了,今天把文章整合一下,希望對大家有幫助,也謝謝朋友的支持,我會繼續堅持原創,寫更好的文章給大家一視頻獲取學習資源分享合集二功能篇實現金額的語音播報功能基于模式風格的封裝之路炫酷動畫跳 showImg(https://segmentfault.com/img/remote/1460000011437678?w=900&h=500);...
摘要:首先先祝大家國慶節快樂今天距離為我運營公眾號已經一個月了,今天把文章整合一下,希望對大家有幫助,也謝謝朋友的支持,我會繼續堅持原創,寫更好的文章給大家一視頻獲取學習資源分享合集二功能篇實現金額的語音播報功能基于模式風格的封裝之路炫酷動畫跳 showImg(https://segmentfault.com/img/remote/1460000011437678?w=900&h=500);...
閱讀 732·2021-11-23 09:51
閱讀 2429·2021-10-11 11:10
閱讀 1298·2021-09-23 11:21
閱讀 1089·2021-09-10 10:50
閱讀 881·2019-08-30 15:54
閱讀 3325·2019-08-30 15:53
閱讀 3286·2019-08-30 15:53
閱讀 3185·2019-08-29 17:23