概述:
好像有三個(gè)月沒(méi)有更新博客了,年前實(shí)在是忙的累成狗啊。。。本想直播功能穩(wěn)定了就沒(méi)那么多事了,沒(méi)想到又要搞魔法短視頻功能,馬丹,短視頻玩成了花啊,擼起袖子干。
現(xiàn)在把我們項(xiàng)目中的直播SDK開(kāi)源出來(lái),我們是境外直播平臺(tái),百萬(wàn)用戶,經(jīng)過(guò)半年迭代,SDK已經(jīng)相當(dāng)穩(wěn)定,大家可以放心使用。https://github.com/WangShuo1143368701/WSLiveDemo
這個(gè)sdk是我根據(jù)這個(gè)librestreaming修修改改出來(lái)的,由于改了太多的代碼,用法已經(jīng)不一樣了。
之前寫(xiě)過(guò)一篇ffmpeg實(shí)戰(zhàn)教程(十一)手把手教你實(shí)現(xiàn)直播功能,不依賴第三方SDK
是用ffmpeg實(shí)現(xiàn)的推流,但是在實(shí)際移動(dòng)端直播項(xiàng)目中,推流是不適合用ffmpeg的。
特性:
支持視頻錄制和推流,錄制視頻推流可以同時(shí)進(jìn)行
支持推流過(guò)程中實(shí)時(shí)截幀功能
支持推流過(guò)程中實(shí)時(shí)鏡像功能,不會(huì)打斷推流
支持設(shè)置關(guān)鍵幀間隔gop
支持動(dòng)態(tài)設(shè)置碼率,幀率
支持分開(kāi)設(shè)置預(yù)覽分辨率,編碼的分辨率
支持gpu濾鏡,并可以通過(guò)opengles繪制圖像紋理來(lái)自定義濾鏡。
支持設(shè)fbo濾鏡組。
支持前后攝像頭快速切換,不會(huì)打斷推流。
支持后臺(tái)推流,后臺(tái)錄制視頻
美顏濾鏡可動(dòng)態(tài)調(diào)節(jié)磨皮,美白,紅潤(rùn)。
兼容GPUImage,一行代碼不用修改就可以直接使用GPUImage的濾鏡。可參考demo。
關(guān)于美顏:
美顏濾鏡可動(dòng)態(tài)調(diào)節(jié)磨皮,美白,紅潤(rùn)。你可以調(diào)出一個(gè)你喜歡的美顏濾鏡。
關(guān)于截幀,鏡像:
推流過(guò)程中可以實(shí)時(shí)截幀。
推流過(guò)程中可以實(shí)時(shí)調(diào)節(jié)鏡像,不會(huì)打斷推流??梢苑謩e調(diào)節(jié)預(yù)覽鏡像,推流鏡像。
關(guān)于性能:
采用相機(jī)回調(diào)紋理texture,OpenGL渲染后直接把textureID傳給編碼器的方案,中間沒(méi)有數(shù)據(jù)格式轉(zhuǎn)換,沒(méi)有g(shù)lReadPixel()函數(shù)耗時(shí)問(wèn)題。所以性能較其它方案要好的多。缺點(diǎn)是必須是Android4.3以上。
關(guān)于使用:
1.所有常用API都在StreamLiveCameraView類中
<me.lake.librestreaming.ws.StreamLiveCameraView
android:id="@+id/stream_previewView"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
2.初始化推流配置, StreamAVOption類里面有多種參數(shù)可配置,如不配置則使用默認(rèn)值
/**
* 設(shè)置推流參數(shù)
*/
public void initLiveConfig() {
mLiveCameraView = (StreamLiveCameraView) findViewById(R.id.stream_previewView);
//參數(shù)配置 start
streamAVOption = new StreamAVOption();
streamAVOption.streamUrl = rtmpUrl;
//參數(shù)配置 end
mLiveCameraView.init(this, streamAVOption);
mLiveCameraView.addStreamStateListener(resConnectionListener);
//設(shè)置濾鏡組
LinkedList<BaseHardVideoFilter> files = new LinkedList<>();
files.add(new GPUImageCompatibleFilter(new GPUImageBeautyFilter()));
files.add(new GPUImageCompatibleFilter(new GPUImageAddBlendFilter()));
mLiveCameraView.setHardVideoFilter(new HardVideoGroupFilter(files));
}
3.開(kāi)始推流錄制 具體參考demo:
case R.id.btn_startStreaming://開(kāi)始推流
if(!liveCameraView.isStreaming()){
liveCameraView.startStreaming(rtmpUrl);
}
break;
case R.id.btn_stopStreaming://停止推流
if(liveCameraView.isStreaming()){
liveCameraView.stopStreaming();
}
break;
case R.id.btn_startRecord://開(kāi)始錄制
if(!liveCameraView.isRecord()){
liveCameraView.startRecord();
}
break;
case R.id.btn_stopRecord://停止錄制
if(liveCameraView.isRecord()){
liveCameraView.stopRecord();
}
關(guān)于集成:
方法1.https://github.com/WangShuo1143368701/WSLiveDemo下載后,copy出libWSLive庫(kù)到你的項(xiàng)目中即可。
方法2.
//Add it in your root build.gradle at the end of repositories:
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
//Add the dependency
dependencies { compile compile 'com.github.WangShuo1143368701:WSLiveDemo:v1.5' }
關(guān)于學(xué)習(xí):
歡迎加入音視頻交流群:364886309