Android系統(tǒng) 自助式網(wǎng)絡(luò)直播SDK技術(shù)實(shí)現(xiàn)方案_第1頁
Android系統(tǒng) 自助式網(wǎng)絡(luò)直播SDK技術(shù)實(shí)現(xiàn)方案_第2頁
Android系統(tǒng) 自助式網(wǎng)絡(luò)直播SDK技術(shù)實(shí)現(xiàn)方案_第3頁
Android系統(tǒng) 自助式網(wǎng)絡(luò)直播SDK技術(shù)實(shí)現(xiàn)方案_第4頁
Android系統(tǒng) 自助式網(wǎng)絡(luò)直播SDK技術(shù)實(shí)現(xiàn)方案_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、. Android系統(tǒng)“自助式網(wǎng)絡(luò)直播SDK技術(shù)實(shí)現(xiàn)方案目錄 TOC o 1-3 h z u HYPERLINK l _Toc450336232一、簡介 PAGEREF _Toc450336232 h 3HYPERLINK l _Toc450336233三、權(quán)限開通申請 PAGEREF _Toc450336233 h 3HYPERLINK l _Toc450336234四、SDK使用準(zhǔn)備 PAGEREF _Toc450336234 h 3HYPERLINK l _Toc4503362351、下載SDK&DEMO PAGEREF _Toc450336235 h 3HYPERLINK l _Toc

2、4503362362、開發(fā)環(huán)境要求 PAGEREF _Toc450336236 h 3HYPERLINK l _Toc4503362373、需要導(dǎo)入的Jar PAGEREF _Toc450336237 h 3HYPERLINK l _Toc4503362384、動態(tài)庫SO PAGEREF _Toc450336238 h 3HYPERLINK l _Toc4503362395、權(quán)限及配置 PAGEREF _Toc450336239 h 3HYPERLINK l _Toc4503362406、代碼混淆 PAGEREF _Toc450336240 h 3HYPERLINK l _Toc4503362

3、41五、快速接入介紹 PAGEREF _Toc450336241 h 3HYPERLINK l _Toc4503362421、權(quán)限認(rèn)證信息配置 PAGEREF _Toc450336242 h 3HYPERLINK l _Toc4503362432、發(fā)起直播流程 PAGEREF _Toc450336243 h 3HYPERLINK l _Toc4503362443、觀看直播流程 PAGEREF _Toc450336244 h 3HYPERLINK l _Toc4503362454、根底功能說明 PAGEREF _Toc450336245 h 3HYPERLINK l _Toc4503362465

4、、響應(yīng)事件回調(diào) PAGEREF _Toc450336246 h 3HYPERLINK l _Toc4503362476、發(fā)起直播詳解 PAGEREF _Toc450336247 h 3HYPERLINK l _Toc4503362487、RTMP觀看直播詳解 PAGEREF _Toc450336248 h 3HYPERLINK l _Toc4503362498、HLS觀看直播及HLS觀看回放 PAGEREF _Toc450336249 h 3HYPERLINK l _Toc4503362509、支持文檔演示 PAGEREF _Toc450336250 h 3HYPERLINK l _Toc45

5、0336251六、DEMO簡介 PAGEREF _Toc450336251 h 3HYPERLINK l _Toc450336252七、第三方K值認(rèn)證 PAGEREF _Toc450336252 h 3HYPERLINK l _Toc4503362531、認(rèn)證流程 PAGEREF _Toc450336253 h 3HYPERLINK l _Toc4503362542、開啟設(shè)置 PAGEREF _Toc450336254 h 3HYPERLINK l _Toc4503362553、K值使用 PAGEREF _Toc450336255 h 3簡介本文檔為了指導(dǎo)開發(fā)者更快使用Android系統(tǒng)上的“

6、自助式網(wǎng)絡(luò)直播效勞SDK,默認(rèn)讀者已經(jīng)熟悉IDE的根本使用方法本文以Eclipse為例,以及具有一定的編程知識根底等。支持的產(chǎn)品特性如下:分類特性名稱描述發(fā)起直播支持編碼類型音頻編碼:AAC,視頻編碼:H.264支持推流協(xié)議RTMP視頻分辨率640*480屏幕朝向橫屏、豎屏閃光燈開/關(guān)靜音開/關(guān)切換攝像頭前、后置攝像頭目標(biāo)碼率使用軟編,碼率固定在300-400之間,暫不可修改支持環(huán)境Android 4.0以上,觀看直播支持播放協(xié)議RTMP/HLS延時RTMP: 2-4秒,HLS:20秒左右支持解碼H.264文檔演示new支持文檔演示文檔可與視頻同步演示觀看回放支持協(xié)議HLS權(quán)限第三方K值認(rèn)證支

7、持客戶自己的權(quán)限驗證機(jī)制來控制觀看直播、觀看回放的權(quán)限其它代碼平安支持代碼混淆權(quán)限開通申請請點(diǎn)擊 API&SDK權(quán)限申請立即溝通申請,申請后客戶經(jīng)理會在線上與您直接聯(lián)系。審核通過后,可以獲取開發(fā)應(yīng)用的權(quán)限信息:App_Key、Secret_Key、App Secret_Key。SDK使用準(zhǔn)備下載SDK&DEMO開發(fā)環(huán)境要求Pc操作系統(tǒng):64window系統(tǒng)JDK: 1.6以上Eclipse : 建議使用官方已經(jīng)集成的Eclipse ,慎重使用Android studioAndroid: 4.0以上備注: Android設(shè)備操作系統(tǒng)需要4.0以上, 需要訪問手機(jī)硬件,暫不支持模擬器開發(fā)需要導(dǎo)入的

8、JarVhallsdk.jar動態(tài)庫SOLibdynload.soLibffmpeg.soLibjingle.solibstlport_shared.solibVinnyLive.so權(quán)限及配置 備注:主要是訪問網(wǎng)絡(luò).Wife.還有手機(jī)硬件的Camera代碼混淆假設(shè)app打包需要進(jìn)展代碼混淆,請?zhí)砑樱?dontwarn - .vhall.*-dontwarn - .vinny.*-keep class .vhall.*;-keep class .vinny.*;快速接入介紹權(quán)限認(rèn)證信息配置以下信息配置到文件里。文件名稱:srce*amplertmpdemoConstants.javapubli

9、c class Constants public static final String APP_KEY = ;public static final String APP_SECRET_KEY = ;其中:App_Key、App_Secret_Key:從此頁面獲取到,發(fā)起直播流程第一步預(yù)覽采集Camera:在Activity的onCreate方法中,創(chuàng)立CameraNewView,并且初始化第二步發(fā)起直播:設(shè)置開場按鈕,在可點(diǎn)擊情況下調(diào)用NativeLive.StartPublish(String Url)。第三步建立Socket發(fā)起直播成功后,連接Socket建立參會 new ZReqEn

10、gine().new Attend第四步停頓直播:設(shè)置停頓按鈕,在可點(diǎn)擊情況下調(diào)用NativeLive.StopPublish()觀看直播流程第一步創(chuàng)立觀看View在Activity的onCreate方法中,創(chuàng)立PlayView,并且初始化第二步開場觀看NativeLive.StartRecv(String watchUrl)第三步停頓觀看NativeLive.StopRecv()根底功能說明備注:以下功能根據(jù)各自需求自行選取使用,設(shè)置后即可顯示Step 1 : 初始化播放器PlayView playview = new PlayView(GLSurfaceView) playview.ini

11、t(with,height) playview.updataScreen(byte Y ,byte U ,byte V )playview.updataScreenAll(byte YUV)Step 2 : 初始化音頻AudioPlay audio = new AudioPlay()Audio.init(int sampleRate, int channelConfig, int audioFormat)Audio.play(byte data, int size)Audio.destory()Step 3 : 使用自定義CameraNewView 自定義view已經(jīng)對手機(jī)攝像頭Camera做

12、好了處理,實(shí)時采集每一幀數(shù)據(jù),包括攝像頭的切換,閃光的開啟,用戶可以自行調(diào)用。mCameraView=(CameraNewView) this.findViewById(R.id.cameraview);響應(yīng)事件回調(diào)直播觀看過程中的回調(diào) LiveCallback :在你當(dāng)前開啟直播的頁面,初始化直播回調(diào):LiveCallback livecallback = new LiveCallback ;實(shí)現(xiàn)其中的回調(diào)方法:public void notifyVideoData(byte data) public int notifyAudioData(byte data, int size) publ

13、ic void notifyEvent(int resultCode, String content)public void onH264Video(byte data, int size, int type)在當(dāng)前Activity onCreate方法中參加回調(diào)LiveObs.setCallBack(livecallback);其中notifyEventresultCode ,content返回的resultCode 是底層定義的直播狀態(tài),需要用戶對其自行處理。狀態(tài)定義如下:public static final int OK_PublishConnect = 0; /直播連接效勞器成功pu

14、blic static final int ERROR_PublishConnect = 1;/直播連接效勞器失敗public static final int OK_WatchConnect = 2; /觀看直播連接效勞器成功public static final int ERROR_WatchConnect = 3; /觀看直播連接效勞器失敗public static final int StartBuffering = 4;/開場緩沖public static final int StopBuffering= 5;/停頓緩沖public static final int ERROR_Pa

15、ram = 6;/錯誤參數(shù)public static final int ERROR_NeedReconnect= 7;/錯誤需要重新連接public static final int ERROR_Send = 8;/發(fā)送直播流失敗public static final int INFO_Speed_Upload= 9;/上傳速度 Kbps單位public static final int INFO_Speed_Download= 10;/下載速度Kbps單位public static final int INFO_NetWork_Status= 11;/網(wǎng)絡(luò)狀態(tài)public static f

16、inal int INFO_Decoded_Video = 12;/視頻解碼public static final int INFO_Decoded_Audio = 13;/音頻解碼public static final int INFO_Record_Audio = 20;/錄音發(fā)起直播詳解用戶使用VhallSDK發(fā)起直播需要首先了解幾個重要的類LiveParam 直播中所需的重要參數(shù)這些參數(shù)會被傳入底層,錯誤的參數(shù)會讓Activity報錯,目前默認(rèn)使用分辨率 640*480 更高的分辨率暫不支持ConnectionChangeReceiver 用來檢測網(wǎng)絡(luò)變化定義的一些常量public s

17、tatic final int NET_ERROR = 0;public static final int NET_UNKNOWN = 1;public static final int NET_2G3G = 2;public static final int NET_WIFI = 3;第一步初始化直播信息創(chuàng)立Activity ,初始化自定義view CameraNewView , 此時的CameraNewView被創(chuàng)立,開啟PreviewCallback 回調(diào),實(shí)現(xiàn)onPreviewFram(),獲取Camera采集的每一幀的數(shù)據(jù),將此數(shù)據(jù)傳遞底層處理mCameraView = (Camer

18、aNewView) this.findViewById(R.id.cameraview);mCameraView.init(param, this, new RelativeLayout.LayoutParams(0, 0);mCameraView.startPublish() / 此方法須直播回調(diào)中返回OK_PublishConnect才能調(diào)用此處代碼必須添加NativeLive.CreateVinnyLive(); / 創(chuàng)立VinnyLive對象LiveObs.setCallback(mLiveCallBack); / 設(shè)置直播回調(diào)NativeLive.EnableDebug(true);

19、 / 是否翻開Debug模式會打印日志NativeLive.AddObs(); /添加直播的監(jiān)聽第二步創(chuàng)立button ,開啟直播。這時調(diào)用底層方法,連接推流地址,需要傳遞一個參數(shù) Path , Path為流的地址。判斷這個方法,如果返回的是0 ,則連接成功,返回非0,則連接失敗NativeLive.StartPublishpath / 連接推流地址第三步處理直播時的回調(diào)當(dāng)直播成功之后,處理直播時時返回的信息,詳細(xì)方法可以參考直播過程的回調(diào) LiveCallback , 處理方案根據(jù)各自需求自行處理。第四步停頓直播CameraView.stopPublish();NativeLive.Stop

20、Publish()RTMP觀看直播詳解第一步初始化PlayView AudioPlay playView 初始化時需要傳入GLSurfaceView , 使用它需要用戶自定義一個渲染器render不過這里在初始化時已經(jīng)定義好,用戶可以直接使用mPlayView = new PlayView(glSurfaceview);mPlayView.init(width , height) / 傳入初始化的寬高;此處代碼必須添加NativeLive.CreateVinnyLive(); / 創(chuàng)立VinnyLive對象LiveObs.setCallback(mLiveCallBack); / 設(shè)置直播回調(diào)

21、NativeLive.EnableDebug(true); / 是否翻開Debug模式會打印日志NativeLive.AddObs(); /添加直播的監(jiān)聽獲取用戶的活動ID此ID需要在PC上取得,請求ZReqEngine.watch(id , APP_KEY , APP_SECRET_KEY , name , email , password , new ReqCallback()param id / 活動ID必傳param APP_KEY/ app_keyparam APP_SECRET_KEY/ app_secret_keyparam name/ 必傳param email / 必傳且保證

22、唯一性param password / 活動如果有K值需要傳callback ReqCallback/ 傳入回調(diào)獲取返回的參數(shù)請求成功之后,會在ReqCallback OnSuccess()返回Json參數(shù)。result rtmp_video/ rtmp觀看直播地址result video/ hls 觀看直播回放地址result status/ 當(dāng)前播放狀態(tài)result msg_server/ 建立參會result msg_token/ 建立參會請求失敗之后,會在ReqCallback OnFail()返回信息,直接打印即可建立參會,參會建立成功,可以統(tǒng)計參會人數(shù)。ZReqEngine.Att

23、end attend = new ZReqEngine().new Attend(msg_server, msg_token);第二步創(chuàng)立button 開場觀看將之前獲取的觀看地址傳入當(dāng)前方法Natiive.StarRecv(path) / 連接承受地址 0則連接成功,非0則連接失敗第三步處理直播時的回調(diào)這時會用到LiveCallback 中的方法public void notifyVideoData(byte data) /得到正在直播的視頻數(shù)據(jù)這時調(diào)用UpdateScreenAll() , 將取得的視頻信息傳給PlayViewmPlayView.UpdateScreenAll(data)p

24、ublic int notifyAudioData(byte data, int size) /得到正在直播的音頻數(shù)據(jù)這時調(diào)用play() , 將取得的視頻信息傳給AudioPlay備注 : notifyEvent() 依然需要調(diào)用第四步停頓觀看NativeLive.StopRecv() stopAudioPlayattend.disAttend(); / 關(guān)閉參會HLS觀看直播及HLS觀看回放初始化 VhallHlsPlayer ,實(shí)現(xiàn)VhallHLSPlayer.Listener需要用戶設(shè)置SurfaceViewString userAgent = Util.getUserAgent(th

25、is, VhallAPP);mMediaPlayer = new VhallHlsPlayer(new HlsRendererBuilder(this, userAgent, path); / 這里需要傳入地址mMediaPlayer.addListener(mVhallPlayerListener);mMediaPlayer.setSurface(Surface); / 設(shè)置SurfaceView mMediaPlayer.setPlayWhenReadytrue / 為true的時候開場播放實(shí)現(xiàn)VhallHLSPlayer.Listener 所需實(shí)現(xiàn)的方法如下 public void on

26、StateChanged(boolean playWhenReady, int playbackState) / 當(dāng)播放狀態(tài)發(fā)生改變的時候public void onError(E*ception e) / 播放錯誤的時候public void onVideoSizeChanged(int width, int height, int unappliedRotationDegrees,float pi*elWidthHeightRatio) / Video尺寸發(fā)生改變的時候獲取播放地址之前需要先獲取用戶的活動ID通過效勞器接口獲取請求ZReqEngine.watch(id , APP_KEY

27、, APP_SECRET_KEY , name , email , password , new ReqCallback()param id / 活動ID必傳param APP_KEY/ app_keyparam APP_SECRET_KEY/ app_secret_keyparam name/ 必傳,參會人員,用于統(tǒng)計param email / 必傳且保證唯一性,參會人員,用于統(tǒng)計,并做為用戶的唯一標(biāo)識param password / 可選,活動如果有K值需要傳callback ReqCallback/ 傳入回調(diào)獲取返回的參數(shù)請求成功之后,會在ReqCallback OnSuccess()返

28、回Json參數(shù)result rtmp_video/ rtmp觀看直播地址result video / hls 觀看直播回放地址result status/ 當(dāng)前播放狀態(tài)result msg_server/ 建立參會result msg_token / 建立參會請求失敗之后,會在ReqCallback OnFail()返回信息,直接打印即可建立Socket連接參會,建立成功后,可以統(tǒng)計參會人數(shù)。ZReqEngine.Attend attend = new ZReqEngine().new Attend(msg_server, msg_token);支持文檔演示當(dāng)直播活動類型為“視頻+文檔或“音頻

29、+文檔時,通過以下方法可集成觀看,文檔會與視頻或音頻播放同步。public class ClassName implements ZReqEngine.FlashMsgListener /觀看直播頁面實(shí)現(xiàn)此接口用于處理文檔翻頁消息ZReqEngine.Attend attend;/ 參會用于統(tǒng)計參與人數(shù)接收文檔聊天等即時消息attend = new ZReqEngine().new Attend(msg_server, msg_token);attend.setFlashMsgListener(this);/設(shè)置文檔翻頁消息接口attend.attend();/參會參會后可承受文檔翻頁消息Ov

30、erridepublic void onFlash(String flashMsg) /當(dāng)直播文檔翻頁時,通過此回調(diào)處理消息,flashMsg為json數(shù)據(jù) /具體處理請看demoattend.disAttend(); /退出觀看時取消參會DEMO簡介DEMO簡介DEMO只針對核心功能進(jìn)展演示,不包括UI界面設(shè)計。主要測試參數(shù)說明:1活動ID:指的是客戶創(chuàng)立的一個直播活動的唯一標(biāo)識,Demo測試時可從e.vhall.的控制臺頁面上獲取到2)Token:Demo測試時可從頁面調(diào)用接口獲取到,有效期為24小時3碼率設(shè)置:主要用于視頻編碼設(shè)置,碼率與視頻的質(zhì)量成正比,默認(rèn)值300,單位Kbps4緩沖

31、時間:延時觀看時間5分辨率:640*4806K值:默認(rèn)為空,指的是控制直播觀看權(quán)限的參數(shù),具體使用說明參考客戶Server端需提供應(yīng)APP的信息客戶Server端需要提供如下信息:1Id:通過客戶Server端接口獲取到,此接口需調(diào)用VHALL接口獲取。2)AccessToken:通過客戶Server端接口獲取到,此接口需調(diào)用VHALL接口獲取。第三方K值認(rèn)證觀看直播、觀看回放的權(quán)限控制,支持使用客戶的權(quán)限驗證邏輯。認(rèn)證流程開啟設(shè)置1全局設(shè)置:針對所有的活動配置生效,如果針對單個活動再做配置,以單個活動配置為最終配置。通過接口調(diào)用設(shè)置 webinar/whole-auth-url 全局配置第三

32、方K值驗證URL2) 針對*個活動的配置方式一:通過頁面配置,數(shù)字表示自己下的活動id3針對*個活動的配置方式二:通過接口(webinar/create或webinar/update)設(shè)置K值使用網(wǎng)頁嵌入或SDK里的調(diào)用方法,請務(wù)必帶上k參數(shù),如果這個參數(shù)為空或者沒有這個參數(shù),則視為認(rèn)證失敗網(wǎng)頁嵌入地址類似:SDK里的調(diào)用方法,需要傳遞3個參數(shù)name,email,passemail:可選參數(shù),如果不填寫系統(tǒng)會隨機(jī)生成地址。由于email自身的唯一性,我們推薦使用email來作為唯一標(biāo)識有效用戶的字段。對于第三方自有用戶數(shù)據(jù)的系統(tǒng),也可以使用一些特征ID作為此標(biāo)識,請以email的格式組織,比方在第三方系統(tǒng)中,用戶ID為123456,可在其后添加一個domain.,組成123456domain.形式的email地址。name: 可選參數(shù),如果不填寫系統(tǒng)會隨機(jī)生成。此字段表示用戶昵稱、或其他有意義的字符串??梢詾橹形?,但必須為UTF-8,且經(jīng)過URL編碼(urlencode)。k:可選參數(shù),此字段為了提供應(yīng)第三方可以根據(jù)自己的權(quán)限系統(tǒng),驗證客戶是否可訪問直播地址。ZReqEngine.watch(id , APP_KEY , APP_SECRET_KEY ,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論