Android開發之APP直播簡介





隨着網絡技術的迅猛發展,網絡直播已不再遙不可及。各行各業以直播爲基礎的應用場景更是如雨後春筍,遍地開花,相關數據也顯示,無論是國內還是國外,市場需求層出不窮,不僅包含視頻門戶、視頻社交、在線教育、娛樂直播,企業視頻協作、新聞媒體、金融、監控以及醫療等各行業均存在巨大的視頻需求。由此,也催生出很多幫助這些行業實現直播功能的第三方雲服務平臺,接入成本不到開發者自己開發的十分之一,相比自主研發,外包直播模塊成爲大多數開發者的首選。

如圖所示,從2015年下半年開始,各大巨頭紛紛發力視頻雲服務,推出直播功能搶灘市場,市場競爭漸進入焦灼狀態。但不管選擇接入哪家的直播SDK,開發者在接入過程中總會遇到各種各樣的問題。下面,小編就APP接入過程中最受開發者關心的問題進行一個詳細的梳理。

如何選擇靠譜的直播產品?

直播產品架構

首先看口碑。看知乎或開發者論壇上是否有該服務商的負面評價,這些評價有些是真實的,但有些可能是競爭對手惡意抹黑,這一點需要辨別清楚。然後是負面評價內容是否是自己最爲關心的,比如服務品質差,技術支持不到位的視頻雲服務平臺,對於小型的開發實力一般的創業公司而言,就不太適合,一旦接入,開發過程中遇到的技術問題因爲得不到及時和有效的響應,經常會讓程序員抓狂。其次看功能。功能是否能滿足需求也是需要關注的核心問題。最後,要看產品性能。這個可以從視頻雲服務商提供的demo判斷出來,試用之後,性能穩不穩定通常心裏就有數了。

直播功能有哪些應用場景?

如圖所示,直播功能的場景非常多樣化,小編總結了一下,直播場景細分爲以下幾個方面:

1、在線教育行業:網校、慕課、K12、在線家教等

2、在線娛樂行業:美女秀場、遊戲直播、演唱會直播KTV直播、婚禮直播、活動直播、體育賽事直播、裝修直播、吃飯直播等

3、社交:明星社交、視頻社交等

4、視頻門戶:視頻直播等

5、企業協作:企業例會直播、產品發佈會直播等

6、在線金融:視頻理財諮詢、在線簽約過程錄製、股評直播、大宗交易平臺直播等

7、安防監控:家庭監控、幼兒園監控、早教中心監控、旅遊景區監控等

8、遠程醫療:視頻問診、專家會診等

9、新聞媒體:現場手機直播、短新聞、庭審直播等

直播功能接入流程及有哪些常見問題?

上圖是網易雲信直播功能的接入流程,一般來說,開發者在接入直播功能的時候,接入流程大概如下:

a、註冊視頻雲賬號

b、創建直播頻道

c、下載SDK和API文檔

d、開發直播推流程序

看起來簡單的接入流程,開發者在實際操作過程中還是會遇到各種各樣的問題。對於這些問題,小編總結了一下,主要有以下四個方面:

1、工程上的問題。比如接入Android端直播SDK,首先要導入SDK包到eclipse或AndroidStudio工程。將開發包libs目錄下的so庫文件放置於工程名/libs/armabi或者/lib/armibi-v7a目錄下,同時將LiveStreamingSDK.jar加入工程。

同時需要在AndroidManifest.xml中添加系統權限。如下

<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS">

作用:允許掛載和反掛載文件系統 <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />

作用:允許程序創建顯示在其他程序之上,並且類型爲TYPE_SYSTEM_ALERT的窗體 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE">

作用:允許程序向外部存儲設備寫數據 <uses-permission android:name="android.permission.INTERNET" />

作用:允許程序打開網絡套接字 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

作用:允許程序獲取網絡相關信息 <uses-permission android:name="android.permission.RECORD_AUDIO"/>

作用:允許程序寫音頻數據 <uses-permission android:name="android.permission.WAKE_LOCK" />

作用:允許程序使用PowerManager WakeLocks以防止處理器休眠或者屏幕鎖屏 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

作用:允許程序獲取Wifi網絡狀態信息 <uses-permission android:name="android.permission.CAMERA" />

作用:允許程序使用設備的camera <uses-permission android:name="android.permission.SET_DEBUG_APP" />

作用:配置一個程序用於調試 <uses-feature android:name="android.hardware.camera "/>

<uses-feature android:name="android.hardware.camera.autofocus"/>

作用:聲明程序使用camera和自動對焦功能 <uses-feature android:glEsVersion="0x00020000" android:required="true" />

作用:聲明程序使用OpenGL ES 2.0最後在Java代碼中導入SDK類,在直播Activity中導入如下類: import com.netease.livestreamingFilter.view.*;

import com.netease.LSMediaCapture.*;

import com.netease.LSMediaCapture.lsMediaCapture.*;

網易雲信工程師建議:對於Andriod,iOS,Windows平臺的接入的詳細使用說明,可以參考網易雲信直播SDK接入文檔。

2、功能性上的問題。開發者在調用第三方SDK接口的時候,由於絕大多數的程序員不會認真去讀對方的API文檔,經常跟着感覺或經驗去做調用,調用過程中經常會出現這樣或那樣的問題。

例如,利用SDK開發一個直播推流應用程序,首先需要的設置相關的直播參數集,包括音頻的碼率,聲道,採樣率,位寬,編碼格式,視頻的碼率,幀率,分辨率,編碼格式,以及直播發送協議。詳細參數如下:

//輸出封裝格式

mLSLiveStreamingParaCtx.eOutFormatType.outputFormatType = RTMP;//直播封裝格式

//攝像頭參數配置

mLSLiveStreamingParaCtx.sLSVideoParaCtx.cameraPosition.cameraPosition =CAMERA_POSITION_BACK;//後置攝像頭

mLSLiveStreamingParaCtx.sLSVideoParaCtx.interfaceOrientation.interfaceOrientation =CAMERA_ORIENTATION_PORTRAIT;//豎屏

//音頻編碼參數配置

mLSLiveStreamingParaCtx.sLSAudioParaCtx.samplerate = 44100;//音頻採樣率

mLSLiveStreamingParaCtx.sLSAudioParaCtx.bitrate = 64000;//音頻編碼碼率

mLSLiveStreamingParaCtx.sLSAudioParaCtx.frameSize = 2048;//音頻一幀數據量

mLSLiveStreamingParaCtx.sLSAudioParaCtx.audioEncoding = AudioFormat.ENCODING_PCM_16BIT;//音頻數據位寬

mLSLiveStreamingParaCtx.sLSAudioParaCtx.channelConfig = AudioFormat.CHANNEL_IN_MONO;

//音頻採樣聲道數

mLSLiveStreamingParaCtx.sLSAudioParaCtx.codec.audioCODECType = LS_AUDIO_CODEC_AAC;

//音頻編碼格式

//視頻編碼參數配置

mLSLiveStreamingParaCtx.sLSVideoParaCtx.fps = 20;//視頻幀率

mLSLiveStreamingParaCtx.sLSVideoParaCtx.bitrate = 600000;//視頻碼率

mLSLiveStreamingParaCtx.sLSVideoParaCtx.codec.videoCODECType = LS_VIDEO_CODEC_AVC;

//視頻編碼格式

mLSLiveStreamingParaCtx.sLSVideoParaCtx.width = 640;//視頻分辨率(寬)

mLSLiveStreamingParaCtx.sLSVideoParaCtx.height = 480;//視頻分辨率(高)

網易雲信工程師建議:對於SDK提供的具體功能,以及相關的接口參數的設置和調用規則,開發者接入前需要好好閱讀開發文檔,詳情可以參考網易雲信直播API文檔。

3、個性化需求的問題。上述兩類問題都被解決後,開發者在整體產品體驗上,還會有一些個性化的需求,比如後臺切換、音視頻流的動態切換、加濾鏡或者混音等。

網易雲信工程師建議:這就需要前期瞭解清楚對方的功能點,是否提供個性化需求的接口。

4、整套系統跑起來之後的穩定性問題。有些不穩定情況是自身的網絡環境不穩定引起的,如果對方的直播產品能夠很好的檢測到網絡抖動,擁有碼流自適應的功能,一定程度上就能避免這個問題。另外,也有一些不穩定情況是對方產品穩定性差引起的。

網易雲信工程師建議:這就需要開發者去關注下對方的關鍵性能指標,比如延遲、卡頓及安全性等。

總結:開發者在選用市面上雲服務商的直播產品時,功能是否滿足需求和服務響應是否及時應該是開發者最應該考量的兩個方面,看似簡單的接入流程,有時候會衍生出各種各樣的問題,對方的技術支持和運維服務非常重要。有些資金不充足的開發者前期會優先選用免費的雲服務,但這也會出現一定的隱患,一旦產品體驗差,更換雲服務商的代價會更大。一般而言,知名大公司的技術實力更強,服務品質也站得住腳。



隨着網絡技術的迅猛發展,網絡直播已不再遙不可及。各行各業以直播爲基礎的應用場景更是如雨後春筍,遍地開花,相關數據也顯示,無論是國內還是國外,市場需求層出不窮,不僅包含視頻門戶、視頻社交、在線教育、娛樂直播,企業視頻協作、新聞媒體、金融、監控以及醫療等各行業均存在巨大的視頻需求。由此,也催生出很多幫助這些行業實現直播功能的第三方雲服務平臺,接入成本不到開發者自己開發的十分之一,相比自主研發,外包直播模塊成爲大多數開發者的首選。

如圖所示,從2015年下半年開始,各大巨頭紛紛發力視頻雲服務,推出直播功能搶灘市場,市場競爭漸進入焦灼狀態。但不管選擇接入哪家的直播SDK,開發者在接入過程中總會遇到各種各樣的問題。下面,小編就APP接入過程中最受開發者關心的問題進行一個詳細的梳理。

如何選擇靠譜的直播產品?

直播產品架構

首先看口碑。看知乎或開發者論壇上是否有該服務商的負面評價,這些評價有些是真實的,但有些可能是競爭對手惡意抹黑,這一點需要辨別清楚。然後是負面評價內容是否是自己最爲關心的,比如服務品質差,技術支持不到位的視頻雲服務平臺,對於小型的開發實力一般的創業公司而言,就不太適合,一旦接入,開發過程中遇到的技術問題因爲得不到及時和有效的響應,經常會讓程序員抓狂。其次看功能。功能是否能滿足需求也是需要關注的核心問題。最後,要看產品性能。這個可以從視頻雲服務商提供的demo判斷出來,試用之後,性能穩不穩定通常心裏就有數了。

直播功能有哪些應用場景?

如圖所示,直播功能的場景非常多樣化,小編總結了一下,直播場景細分爲以下幾個方面:

1、在線教育行業:網校、慕課、K12、在線家教等

2、在線娛樂行業:美女秀場、遊戲直播、演唱會直播KTV直播、婚禮直播、活動直播、體育賽事直播、裝修直播、吃飯直播等

3、社交:明星社交、視頻社交等

4、視頻門戶:視頻直播等

5、企業協作:企業例會直播、產品發佈會直播等

6、在線金融:視頻理財諮詢、在線簽約過程錄製、股評直播、大宗交易平臺直播等

7、安防監控:家庭監控、幼兒園監控、早教中心監控、旅遊景區監控等

8、遠程醫療:視頻問診、專家會診等

9、新聞媒體:現場手機直播、短新聞、庭審直播等

直播功能接入流程及有哪些常見問題?

上圖是網易雲信直播功能的接入流程,一般來說,開發者在接入直播功能的時候,接入流程大概如下:

a、註冊視頻雲賬號

b、創建直播頻道

c、下載SDK和API文檔

d、開發直播推流程序

看起來簡單的接入流程,開發者在實際操作過程中還是會遇到各種各樣的問題。對於這些問題,小編總結了一下,主要有以下四個方面:

1、工程上的問題。比如接入Android端直播SDK,首先要導入SDK包到eclipse或AndroidStudio工程。將開發包libs目錄下的so庫文件放置於工程名/libs/armabi或者/lib/armibi-v7a目錄下,同時將LiveStreamingSDK.jar加入工程。

同時需要在AndroidManifest.xml中添加系統權限。如下

<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS">

作用:允許掛載和反掛載文件系統 <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />

作用:允許程序創建顯示在其他程序之上,並且類型爲TYPE_SYSTEM_ALERT的窗體 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE">

作用:允許程序向外部存儲設備寫數據 <uses-permission android:name="android.permission.INTERNET" />

作用:允許程序打開網絡套接字 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

作用:允許程序獲取網絡相關信息 <uses-permission android:name="android.permission.RECORD_AUDIO"/>

作用:允許程序寫音頻數據 <uses-permission android:name="android.permission.WAKE_LOCK" />

作用:允許程序使用PowerManager WakeLocks以防止處理器休眠或者屏幕鎖屏 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

作用:允許程序獲取Wifi網絡狀態信息 <uses-permission android:name="android.permission.CAMERA" />

作用:允許程序使用設備的camera <uses-permission android:name="android.permission.SET_DEBUG_APP" />

作用:配置一個程序用於調試 <uses-feature android:name="android.hardware.camera "/>

<uses-feature android:name="android.hardware.camera.autofocus"/>

作用:聲明程序使用camera和自動對焦功能 <uses-feature android:glEsVersion="0x00020000" android:required="true" />

作用:聲明程序使用OpenGL ES 2.0最後在Java代碼中導入SDK類,在直播Activity中導入如下類: import com.netease.livestreamingFilter.view.*;

import com.netease.LSMediaCapture.*;

import com.netease.LSMediaCapture.lsMediaCapture.*;

網易雲信工程師建議:對於Andriod,iOS,Windows平臺的接入的詳細使用說明,可以參考網易雲信直播SDK接入文檔。

2、功能性上的問題。開發者在調用第三方SDK接口的時候,由於絕大多數的程序員不會認真去讀對方的API文檔,經常跟着感覺或經驗去做調用,調用過程中經常會出現這樣或那樣的問題。

例如,利用SDK開發一個直播推流應用程序,首先需要的設置相關的直播參數集,包括音頻的碼率,聲道,採樣率,位寬,編碼格式,視頻的碼率,幀率,分辨率,編碼格式,以及直播發送協議。詳細參數如下:

//輸出封裝格式

mLSLiveStreamingParaCtx.eOutFormatType.outputFormatType = RTMP;//直播封裝格式

//攝像頭參數配置

mLSLiveStreamingParaCtx.sLSVideoParaCtx.cameraPosition.cameraPosition =CAMERA_POSITION_BACK;//後置攝像頭

mLSLiveStreamingParaCtx.sLSVideoParaCtx.interfaceOrientation.interfaceOrientation =CAMERA_ORIENTATION_PORTRAIT;//豎屏

//音頻編碼參數配置

mLSLiveStreamingParaCtx.sLSAudioParaCtx.samplerate = 44100;//音頻採樣率

mLSLiveStreamingParaCtx.sLSAudioParaCtx.bitrate = 64000;//音頻編碼碼率

mLSLiveStreamingParaCtx.sLSAudioParaCtx.frameSize = 2048;//音頻一幀數據量

mLSLiveStreamingParaCtx.sLSAudioParaCtx.audioEncoding = AudioFormat.ENCODING_PCM_16BIT;//音頻數據位寬

mLSLiveStreamingParaCtx.sLSAudioParaCtx.channelConfig = AudioFormat.CHANNEL_IN_MONO;

//音頻採樣聲道數

mLSLiveStreamingParaCtx.sLSAudioParaCtx.codec.audioCODECType = LS_AUDIO_CODEC_AAC;

//音頻編碼格式

//視頻編碼參數配置

mLSLiveStreamingParaCtx.sLSVideoParaCtx.fps = 20;//視頻幀率

mLSLiveStreamingParaCtx.sLSVideoParaCtx.bitrate = 600000;//視頻碼率

mLSLiveStreamingParaCtx.sLSVideoParaCtx.codec.videoCODECType = LS_VIDEO_CODEC_AVC;

//視頻編碼格式

mLSLiveStreamingParaCtx.sLSVideoParaCtx.width = 640;//視頻分辨率(寬)

mLSLiveStreamingParaCtx.sLSVideoParaCtx.height = 480;//視頻分辨率(高)

網易雲信工程師建議:對於SDK提供的具體功能,以及相關的接口參數的設置和調用規則,開發者接入前需要好好閱讀開發文檔,詳情可以參考網易雲信直播API文檔。

3、個性化需求的問題。上述兩類問題都被解決後,開發者在整體產品體驗上,還會有一些個性化的需求,比如後臺切換、音視頻流的動態切換、加濾鏡或者混音等。

網易雲信工程師建議:這就需要前期瞭解清楚對方的功能點,是否提供個性化需求的接口。

4、整套系統跑起來之後的穩定性問題。有些不穩定情況是自身的網絡環境不穩定引起的,如果對方的直播產品能夠很好的檢測到網絡抖動,擁有碼流自適應的功能,一定程度上就能避免這個問題。另外,也有一些不穩定情況是對方產品穩定性差引起的。

網易雲信工程師建議:這就需要開發者去關注下對方的關鍵性能指標,比如延遲、卡頓及安全性等。

總結:開發者在選用市面上雲服務商的直播產品時,功能是否滿足需求和服務響應是否及時應該是開發者最應該考量的兩個方面,看似簡單的接入流程,有時候會衍生出各種各樣的問題,對方的技術支持和運維服務非常重要。有些資金不充足的開發者前期會優先選用免費的雲服務,但這也會出現一定的隱患,一旦產品體驗差,更換雲服務商的代價會更大。一般而言,知名大公司的技術實力更強,服務品質也站得住腳。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章