1. 程式人生 > >使用阿里雲實現簡單的直播

使用阿里雲實現簡單的直播

先說點廢話, - -!最近懶癌犯了,都特麼倆月沒寫東西了,是不是要廢了?不過確實專案面臨上線,時間也有點緊,經常加班,而且!!在這個緊要關頭,經理說要加一個簡單的直播模組,不要太華麗的那種,只要能實現:一邊播,另一邊能看就行。說:用阿里雲的。
於是乎,我就去官網上下載了Demo以及SDK等瞅了瞅。傳送門:https://help.aliyun.com/document_detail/45270.html?spm=5176.product29949.6.667.YZNFdd
說到直播,因為以前也沒接觸過,只知道點皮毛,據我理解就是一個推拉流的過程。一方進行直播推流,另一方進行拉流觀看。在專案中整合了直播模組後,現在看來貌似理解的還算正確。 - -!
官網中的Demo也分兩個,一個是直播推流的Demo,一個是拉流觀看的Demo,需要匯入不同的SDK。進入正題:
——————————————————————————————————————————————
推流:首先你需要有一個推流地址,經理告訴我是rtmp格式的,地址格式是這樣的:

"rtmp://video-center.alivecdn.com/...

後面省略號就不顯示了,總之,這個推流地址由後臺來提供,你只要需要生成流推送就ok了。
官方推流Demo中的核心程式碼:

LiveCameraActivity.RequestBuilder builder = new LiveCameraActivity.RequestBuilder()
                .bestBitrate(600)
                .cameraFacing(AlivcMediaFormat.CAMERA_FACING_FRONT)
                .dx
(14).dy(14).site(1) .rtmpUrl("rtmp://video-center.alivecdn.com/...") .videoResolution(AlivcMediaFormat.OUTPUT_RESOLUTION_360P) .portrait(false) .minBitrate(500) .maxBitrate(800) .frameRate(30) .initBitrate
(600); LiveCameraActivity.startActivity(this, builder);

這裡面的各種引數配置我都是取的定值,Demo裡介面是可以自定義的,由於我們專案暫時要求沒那麼高,我就全取了預設值,Demo裡還有個水印圖片啥的,我沒新增這個引數,因為完全不需要。需要說明的是這個方法,執行之後,雖然打開了直播的頁面LiveCameraActivity,但是還並沒有開啟真正的直播,真正開啟直播的核心程式碼是LiveCameraActivity中的這些:

private final CompoundButton.OnCheckedChangeListener _PushOnCheckedChange =
            new CompoundButton.OnCheckedChangeListener() {
                @Override
                public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                    if (isChecked) {
                        try 
mMediaRecorder.startRecord(pushUrl);//開啟直播
                        } catch (Exception e) {
                        }
                        isRecording = true;
                    } else {                  
                        mMediaRecorder.stopRecord();//停止直播
                        isRecording = false;
                    }
                }
            };

看過demo的都應該知道,這個頁面中有一個按鈕控制的開啟和關閉直播,過多不解釋。上面的這個方法才是真正意義上的控制直播的開啟和關閉。到此為止,推流就算完成了。
匯入推流SDK的方法簡單說一下:下載官網推流的Demo後,會看到裡面的libs和jniLibs,libs下有個alive-live-record的jar包,新增自己專案工程libs下,jniLibs下的armeabi-7a資料夾裡的so包也新增到自己專案的jniLibs包裡,注意:別忘了配置相關許可權和application裡初始化so包。具體參考官方Demo吧。

拉流:

拉流的過程,說白了,就跟播放一個url的視訊一樣,首先,觀看直播,需要有一個觀看的地址,同樣,這個地址也是後臺返給我們的,我們不用擔心,但是我們Android原生的VideoView是播放不了rtmp格式的,只能藉助阿里雲提供的播放器來觀看直播。
首先,需要匯入相應的sdk,下載官網demo後,裡面libs資料夾下有個AliyunPlayer.arr,我們同樣放到我們自己專案的libs裡,然後

//配合載入aar資源庫使用
repositories {
    flatDir {
        dirs 'libs'
    }
}

最後dependencies中:

compile(name: 'AliyunPlayer', ext: 'aar')

裡面的核心類,當然就是PlayerActivity啦!
其實核心程式碼也就這一句 - -!

mPlayer.prepareAndPlay("LiveUrl");//設定播放地址

這個LiveUrl就是後臺返給你的觀看直播的地址~至於觀看直播的介面效果可以隨便修改自定義成你們自己需要的,具體參考Demo,Over~~~~