Android系統上的 “自助式網絡直播SDK”技術方案
《Android系統上的 “自助式網絡直播SDK”技術方案》由會員分享,可在線閱讀,更多相關《Android系統上的 “自助式網絡直播SDK”技術方案(13頁珍藏版)》請在裝配圖網上搜索。
1、 Android 系統上的 “自助式網絡直播SDK”技術方案 目錄 一、 簡介 3 三、 權限開通申請 3 四、 SDK 使用準備 3 1、 下載 SDK&DEMO 3 2、 開發(fā)環(huán)境要求 3 3、 需要導入的 Jar 4 4、 動態(tài)庫 SO 4 5、 權限及配置 4 6、 代碼混淆 5 五、 快速接入介紹 5 1、 權限認證信息配置 5 2、 發(fā)起直播流程 5 3、 觀看直播流程 5 4、 基礎功能說明 6 5、
2、響應事件(回調) 6 6、 發(fā)起直播詳解 7 7、 RTMP觀看直播詳解 8 8、 HLS觀看直播及HLS觀看回放 9 9、 支持文檔演示 10 六、 DEMO簡介 10 七、 第三方K值認證 11 1、 認證流程 11 2、 開啟設置 11 3、 K 值使用 11 一、 簡介 本文檔為了指導開發(fā)者更快使用Android系統上的“自助式網絡直播服務SDK”,默認讀 者已經熟悉IDE的基本使用方法(本文以Eclipse為例),以及具有一定的編程知識基礎等。 支持的產品特性如下: 分類 特性名稱 描述 發(fā)起直播 支持編碼類型 音頻編碼:AAC,
3、視頻編碼:H.264 支持推流協議 RTMP 視頻分辨率 640*480 屏幕朝向 橫屏、豎屏 閃光燈 開/關 靜音 開/關 切換攝像頭 前、后置攝像頭 目標碼率 使用軟編,碼率固定在300-400之間,暫不可修改 支持環(huán)境 Android4.0 以上, 觀看直播 支持播放協議 RTMP/HLS 延時 RTMP:2-4 秒,HLS: 20 秒左右 支持解碼 H.264 文檔演示 (new) 支持文檔演示 文檔可與視頻冋步演示 觀看回放 支持協議 HLS 權限 第三方K值認證 支持客戶自己的權限驗證機制來控制觀看直播、觀看
4、 回放的權限 其它 代碼安全 支持代碼混淆 二、 權限開通申請 請點擊 API&SDK 權限申請 立即溝通申請,申請后客戶經理會在線上與您直接聯系。 審核通過后,可以獲取開發(fā)應用的權限信息:App_Key、Secret_Key、AppSecret_Key。 三、 SDK 使用準備 1、 下載 SDK&DEMO 2、 開發(fā)環(huán)境要求 Pc 操作系統: 64window 系統 JDK:1.6 以上 Eclipse: 建議使用官方已經集成的 Eclipse, 謹慎使用 Androidstudio Android:4.0 以上 備注:Android設備操作系統需要4.0以上
5、,需要訪問手機硬件,暫不支持模擬器開發(fā)
3、 需要導入的 Jar
Vhallsdk.jar
4、 動態(tài)庫 SO
Libdynload.so
Libffmpeg.so
Libjingle.so
libstlport_shared.so
libVinnyLive.so
5、 權限及配置
6、rmission android:name="android.permission.RECORD_AUDIO" />
9、rc\com\example\rtmpdemo\Constants.java publicclassConstants{
publicstaticfinalStringAPP_KEY=""; publicstaticfinalStringAPP_SECRET_KEY="";
}
其中:App_Key、App_Secret_Key:從此頁面獲取到,
2、 發(fā)起直播流程
第一步 預覽采集 Camera:
在 Activity 的 onCreate 方法中,創(chuàng)建 CameraNewView ,并且初始化 第二步 發(fā)起直播:
設置開始按鈕,在可點擊情況下調用 NativeLive.Sta 10、rtPublish(String Url)。 第三步 建立 Socket
發(fā)起直播成功后 ,連接 Socket 建立參會 new ZReqEngine().new Attend() 第四步 停止直播:
設置停止按鈕,在可點擊情況下調用 NativeLive.StopPublish()
3、 觀看直播流程
第一步 創(chuàng)建觀看 View
在 Activity 的 onCreate 方法中,創(chuàng)建 PlayView ,并且初始化 第二步 開始觀看
NativeLive.StartRecv(String watchUrl)
第三步 停止觀看
NativeLive.StopRecv()
4 11、、 基礎功能說明
備注: 以下功能根據各自需求自行選取使用,設置后即可顯示
Step 1 :初始化播放器
PlayView playview = new PlayView(GLSurfaceView) playview.init(with,height) playview.updataScreen(byte [] Y ,byte [] U ,byte [] V ) playview.updataScreenAll(byte [] YUV)
Step 2 : 初始化音頻
AudioPlay audio = new AudioPlay()
Audio.init(int sampleRa 12、te, int channelConfig, int audioFormat) Audio.play(byte[] data, int size)
Audio.destory()
Step 3 : 使用自定義 CameraNewView
自定義view已經對手機攝像頭(Camera)做好了處理,實時采集每一幀數據,包括 攝像頭的切換,閃光的開啟,用戶可以自行調用。
mCameraView=(CameraNewView) this.findViewById(R.id.cameraview);
5、 響應事件(回調)
直播觀看過程中的回調 LiveCallback: 在你當前開啟直播的 13、頁面,初始化直播回調:
LiveCallback livecallback = new LiveCallback ; 實現其中的回調方法:
public void notifyVideoData(byte[] data)
public int notifyAudioData(byte[] data, int size)
public void notifyEvent(int resultCode, String content) public void onH264Video(byte[] data, int size, int type)
在當前 Activity onCreate 14、 方法中加入回調 LiveObs.setCallBack(livecallback);
其中 notifyEvent(resultCode , content) 返回的 resultCode 是底層定義的直播狀態(tài), 需要用戶對其自行處理。 狀態(tài)定義如下:
= 0; //直播連接服務器成
public static final int OK_PublishConnect
public static final int ERROR_PublishConnect = 1; //直播連接服務器失敗
public static final int OK_WatchConnect = 2; // 15、觀看直播連接服務器成功
public static final
int ERROR_WatchConnect = 3;//觀看直播連接服務器失敗
public static final
int StartBuffering
public static final
int StopBuffering
public static final int ERROR_Param
= 4;//開始緩沖
= 5;// 停止緩沖
= 6;// 錯誤參數
public static final public static final public static final public 16、 static final public static final public static final public static final
int ERROR_NeedReconnect int ERROR_Send
int INFO_Speed_Upload int INFO_Speed_Download int INFO_NetWork_Status int INFO_Decoded_Video int INFO_Decoded_Audio
= 7;// 錯誤 需要重新連接
= 8;// 發(fā)送直播流失敗
= 9;// 上傳速度 Kbps 單位
= 10;// 下載速度 17、Kbps 單位
= 11;// 網絡狀態(tài)
12;//視頻解碼
13;//音頻解碼
public static final int INFO_Record_Audio = 20;//錄音
6、 發(fā)起直播詳解
用戶使用 VhallSDK 發(fā)起直播 需要首先了解幾個重要的類
LiveParam 直播中所需的重要參數(這些參數會被傳入底層,錯誤的參數會讓 Activity 報錯 ,目前默認使用分辨率 640*480 更高的分辨率暫不支持)
ConnectionChangeReceiver 用來檢測網絡變化 定義的一些常量
public static final int NET_E 18、RROR = 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回調,實現onPreviewFram(),獲取Camera采集的每一幀的數據, 將此數據傳遞底層處理
mCameraView = (CameraNe 19、wView) this.findViewById(R.id.cameraview); mCameraView.init(param, this, new RelativeLayout.LayoutParams(0, 0)); mCameraView.startPublish() // 此方法須直播回調中返回 OK_PublishConnect 才能 調用
此處代碼必須添加
NativeLive.CreateVinnyLive(); // 創(chuàng)建 VinnyLive 對象
LiveObs.setCallback(mLiveCallBack); // 設置直播回調 Nati veLive.En 20、ableDebug( true); // 是否打開 Debug 模式 (會打印日志) NativeLive.AddObs(); //添加直播的監(jiān)聽
第二步 創(chuàng)建 button , 開啟直播 。
這時調用底層方法,連接推流地址,需要傳遞一個參數Pa th , Pa th為流的地址。判 斷這個方法,如果返回的是0 ,則連接成功 ,返回非0,則連接失敗
NativeLive.StartPublish(path) // 連接推流地址
第三步 處理直播時的回調 當直播成功之后,處理直播時時返回的信息 ,詳細方法可以參考直播過程的回調 LiveCallback , 處理方案根據各自需求自行處理。
21、
第四步 停止直播
CameraView.stopPublish();
NativeLive.StopPublish()
7、 RTMP 觀看直播詳解
第一步 初始化 PlayView AudioPlay
playView 初始化時需要傳入 GLSurfaceView , 使用它需要用戶自定義一個渲染器 (render)不過這里在初始化時已經定義好,用戶可以直接使用
mPlayView = new PlayView(glSurfaceview); mPlayView.init(width , height) // 傳入初始化的寬高; 此處代碼必須添加
NativeLive.Cre 22、ateVinnyLive(); // 創(chuàng)建 VinnyLive 對象
LiveObs.setCallback(mLiveCallBack); // 設置直播回調 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 23、 id
//活動ID必傳
@param APP_KEY
// app_key
@param APP_SECRET_KEY
// app_secret_key
@param name
// 必傳
@param email
// 必傳且保證唯一性
@param password
// 活動如果有 K 值需要傳
@callback ReqCallback
// 傳入回調 獲取返回的參數
請求成功之后,會在ReqCallback OnSuccess()返回Json參數。
@result rtmp_video
@result video
@result status
24、@result msg_server
@result msg_token
// rtmp 觀看直播地址
// hls 觀看直播回放地址
// 當前播放狀態(tài)
// 建立參會
// 建立參會
請求失敗之后,會在ReqCallback OnFail()返回信息,直接打印即可
建立參會,參會建立成功,可以統計參會人數。
ZReqEngine.Attend attend = new ZReqEngine().new Attend(msg_server, msg_token);
第二步 創(chuàng)建 button 開始觀看 將之前獲取的觀看地址傳入當前方法
Natiive.StarRecv( 25、path) // 連接接受地址 0 則連接成功 ,非 0 則連接失敗
第三步 處理直播時的回調
這時會用到 LiveCallback 中的方法
public void notifyVideoData(byte[] data) //得到正在直播的視頻數據 這時調用 UpdateScreenAll() , 將取得的視頻信息傳給 PlayView mPlayView.UpdateScreenAll(data)
public int notifyAudioData(byte[] data, int size) // 得到正在直播的音頻數
據
這時調用 play() , 將取得的視頻信息傳給 26、 AudioPlay 備注 : notifyEvent() 依然需要調用
第四步 停止觀看
NativeLive.StopRecv() stopAudioPlay attend.disAttend(); // 關閉參會
8、 HLS觀看直播及HLS觀看回放
初始化 VhallHlsPlayer ,實現 VhallHLSPlayer.Listener 需要用戶設置 SurfaceView
String userAgent = Util.getUserAgent(this, "VhallAPP");
mMediaPlayer = new VhallHlsPlayer(new HlsRe 27、ndererBuilder(this, userAgent, path)); // 這里需要傳入地址 mMediaPlayer.addListener(mVhallPlayerListener);
mMediaPlayer.setSurface(Surface); // 設置 SurfaceView mMediaPlayer.setPlayWhenReady(true) // 為 true 的時候開始播放
實現 VhallHLSPlayer.Listener 所需實現的方法如下
public void onStateChanged(boolean playWhenReady, int p 28、laybackState) {} // 當 播放狀態(tài)發(fā)生改變的時候
public void onError(Exception e) {} // 播放錯誤的時候
public void onVideoSizeChanged(int width, int height, int unappliedRotationDegrees,float pixelWidthHeightRatio) {} // Video 尺寸發(fā)生改變的時 候
獲取播放地址之前需要先獲取用戶的活動ID (通過服務器接口獲取)
請求 ZReqEngine.watch(id , APP_KEY , APP_SECRET_K 29、EY , name , email , password , new ReqCallback())
@param id
//活動ID必傳
@param APP_KEY
// app_key
@param APP_SECRET_KEY
// app_secret_key
@param name
// 必傳,參會人員姓名,用于統計
@param email
// 必傳且保證唯一性,參會人員郵箱,用于統計,并做為用
戶的唯一標識
@param password
// 可選,活動如果有 K 值需要傳
@callback ReqCallback
// 傳入回調 獲取返回 30、的參數
請求成功之后,會在ReqCallback OnSuccess()返回Json參數
@result rtmp_video
@result video
@result status
@result msg_server
@result msg_token
// rtmp 觀看直播地址 // hls 觀看直播回放地址
// 當前播放狀態(tài)
// 建立參會
// 建立參會
請求失敗之后,會在ReqCallback OnFail()返回信息,直接打印即可 建立Socket連接參會,建立成功后,可以統計參會人數。
ZReqEngine.Attend attend = ne 31、w ZReqEngine().new Attend(msg_server, msg_token);
9、 支持文檔演示 當直播活動類型為“視頻+文檔”或“音頻+文檔”時,通過以下方法可集成觀看,文檔會 與視頻或音頻播放同步。
public class ClassName implements ZReqEngine.FlashMsgListener //觀看直播頁 面實現此接口用于處理文檔翻頁消息
ZReqEngine.Attend attend;// 參會 用于統計參與人數 接收文檔 聊天等即時消息 attend = new ZReqEngine().new Attend(msg_ser 32、ver, msg_token);
att end.se tFlashMsgLis tener( this);//設置文檔翻頁消息接口
att end.a tt end();//參會 參會后可接受文檔翻頁消息
@Override
publicvoidonFlash(StringflashMsg){ //當直播文檔翻頁時,通過此回調處理消息, flashMsg 為 json 數據
//具體處理請看 demo
}
attend.disAttend(); //退出觀看時取消參會
五、 DEMO 簡介
1、 DEMO 簡介
DEMO只針對核心功能進行演示,不包括UI界面設計。
2、 33、 主要測試參數說明:
1) 活動ID:指的是客戶創(chuàng)建的一個直播活動的唯一標識,Demo測試時可從 的控制臺頁面上獲取到
2) Token: Demo 測試時可從頁面調用接口獲取到,有效期為 24 小時
3) 碼率設置:主要用于視頻編碼設置,碼率與視頻的質量成正比,默認值 300,單位 Kbps
4) 緩沖時間:延時觀看時間
5) 分辨率: 640*480
6) K 值: 默認為空,指的是控制直播觀看權限的參數,具體使用說明參考
3、 客戶 Server 端需提供給 APP 的信息 客戶 Server 端需要提供如下信息:
1) Id:通過客戶Server端接口獲取到,此接口需調 34、用VHALL接口獲取。
2) AccessToken:通過客戶Server端接口獲取到,此接口需調用VHALL接口獲取。
六、第三方K值認證
觀看直播、觀看回放的權限控制,支持使用客戶的權限驗證邏輯。
1、 認證流程
第三方認liFSer^Br
Vhall URL接口
第三方認證
2、 開啟設置
1) 全局設置: 針對所有的活動配置生效,如果針對單個活動再做配置,以單個活動配置為最 終配置。通過接口調用設置webinar/whole-auth-url全局配置第三方K值驗證URL
2) 針對某個活動的配置方式一:通過頁面配置,數字表示自己帳號下的活動id
3) 針對某個活動 35、的配置方式二:通過接口(webinar/create或webinar/update)設置
3、 K值使用
1)網頁嵌入或SDK里的調用方法,請務必帶上k參數,如果這個參數為空或者沒有這個參數, 則視為認證失敗
?網頁嵌入地址類似:
? SDK里的調用方法,需要傳遞3個參數name,email,pass
email:可選參數,如果不填寫系統會隨機生成郵箱地址。由于ema訂自身的唯一性,我們 推薦使用email來作為唯一標識有效用戶的字段。對于第三方自有用戶數據的系統,也可 以使用一些特征ID作為此標識,請以emai l的格式組織,比如在第三方系統中,用戶ID為 123456,可在其后添 36、加一個@,組成 形式的email地址。 name: 可選參數,如果不填寫系統會隨機生成。此字段表示用戶昵稱、姓名或其他有意義 的字符串??梢詾橹形?,但必須為UTF-8,且經過URL編碼(urlencode)。
k:可選參數,此字段為了提供給第三方可以根據自己的權限系統,驗證客戶是否可訪問 直播地址。
ZReqEngine.watch(id , APP_KEY , APP_SECRET_KEY , name , email , password , new
ReqCallback())
@param id
//活動ID必傳
@param APP_KEY
//
app_key
37、
@param APP_SECRET_KEY
//
app_secret_key
@param name
//
必傳
@param email
//
必傳且保證唯一性
@param password
//
活動如果有K值需要傳
@callback ReqCallback
// 傳入回調 獲取返回的參數
觀看直播(僅HLS可用)
ZReqEngine.watch(id , APP_KEY , APP_SECRET_KEY , name , email , password , new
ReqCallback())
@param id
/ 38、/活動ID必傳
@param APP_KEY
//
app_key
@param APP_SECRET_KEY
//
app_secret_key
@param name
//
必傳,參會人員姓名,用于統計
@param email
//
必傳且保證唯一性,參會人員郵箱,用于統計,并做為用
戶的唯一標識
@param password
//
可選,活動如果有K值需要傳
@callback ReqCallback
// 傳入回調 獲取返回的參數
2) Vhall系統收到用戶的接口訪問請求后,會向第三方認證URL(au th_ur l)發(fā)送HT 39、TP POST請 求,同時將email和k值作為POST數據提交 給第三方認證。由第三方系統驗證k值的合法性。如 果認證通過,第三方認證URL(auth_url)返回字符串pass,否則的返回fail 注:需要確保您的回調地址支持 multipart/form-data 方式接收 post 數據。
3) Vhall系統根據第三方認證URL返回值判斷認證是否成功。只有收到pass,才能認定為驗 證成功,否則一律跳轉到指定的認證失敗URL,或者提示'非法訪問’
4) 參數特征
URL請求很容易被探測截獲,這就要求第三方系統生成的K值必須有以下特征:
? 唯一性:每次調用接口必須產生不同的K值
? 時效性:設定一個時間范圍,超時的K值即失效。
? 如果包含有第三方系統內部信息,必須加密和混淆過。
5) 建議的K值實現
第三方系統可以考慮K值元素包括:用戶ID、Vhall直播ID、時間戳(1970-01-01至今的秒數) 元素組合后加密后,使用Base64或者hex匹配成URL可識別編碼。K值在第三方系統中持久化或 放在Cache中
回調驗證時,根據時間戳判斷是否在設定時間內有效
驗證結束,若認證通過,則從DB或Cache中移除K值
DB或Cache建議有時效性控制,自動失效或定期清理過期數據
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
5. 裝配圖網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。