ffmpeg實戰教程(十一)手把手教你實現直播功能,不依賴第三方SDK
ffmpeg實戰教程(十一)手把手教你實現直播功能,不依賴第三方SDK
2017年05月19日 20:24:01
閱讀數:7817
直播,2016最火的技術之一了,更多的關於直播的知識:http://blog.csdn.net/king1425/article/details/72489272 …這篇我們就不依賴任何整合好的SDK,自己搭建伺服器,用ffmpeg+nginx實現手機直播功能
先上圖:
推流的手機
拉流的網頁和VL播放器
拉流的手機客戶端
對於nginx伺服器的搭建之前有寫過:
ffmpeg實戰教程(九)windows下ffmpeg命令+nginx + rtmp實現推流,拉流。
這篇也建議看一下:
下面開始實現手機直播功能
1.首先你要準備一份編譯好的ffmpeg+x264庫,我們打算軟編碼推流。
如果你沒有編譯好的ffmpeg+x264庫也沒關係,我最後會提供原始碼,包含了這些。
其中libnative-lib.so是我打包的採集推流的方法,使用方式如下
2.然後我們在建一個包 com.ws.ffmpegandroidcameralive,在這個包下寫一個WSPlayer類。
public class WSPlayer {
static {
System.loadLibrary("avutil-54");
System.loadLibrary("swresample-1");
System.loadLibrary("avcodec-56");
System.loadLibrary("avformat-56");
System.loadLibrary("swscale-3");
System.loadLibrary("postproc-53");
System.loadLibrary("avfilter-5");
System.loadLibrary("avdevice-56");
System.loadLibrary("native-lib");
}
public static native int initialize(int width,int height,String url);
public static native int start(byte[] cameraData);
public static native int stop();
public static native int close();
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
initialize(int width,int height,String url) 是初始化方法,三個引數分別是視訊的寬,高,以及,推流的地址。
start(byte[] cameraData);開始推流,引數傳入相機的NV21資料。
stop();停止推流。
close();關閉。
3.編寫介面
點選start開始推流
4.實現具體邏輯
activity中
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
...
WSPlayer.initialize(mCamera.getParameters().getPreviewSize().width,mCamera.getParameters().getPreviewSize().height,"rtmp://192.168.9.135:1935/wstv/home");
...
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
在onCreate中初始化WSPlayer 其中rtmp://192.168.9.135:1935/wstv/home是我的伺服器地址
final Camera.PreviewCallback mPreviewCallbacx=new Camera.PreviewCallback() {
@Override
public void onPreviewFrame(byte[] data, Camera arg1) {
WSPlayer.start(data);
}
};
- 1
- 2
- 3
- 4
- 5
- 6
- 7
WSPlayer.start(data) 在相機的預覽回撥裡面開始新增資料進行推流
@Override
protected void onPause(){
super.onPause();
WSPlayer.stop();
WSPlayer.close();
if(mCamera!=null){
mCamera.release();
mCamera=null;
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
在activity的onPause()方法裡面關閉推流
詳情:demo下載:https://github.com/WangShuo1143368701/FFmpegandroidWSLive
相關文章
- FFmpeg總結(十三)用ffmpeg基於nginx實現直播功能,不用第三方SDK,自研推流拉流Nginx
- Windows11實現錄屏直播,H5頁面直播 HLS ,不依賴FlashWindowsH5
- 實戰四:手把手教你實現數字識別
- 第三方直播美顏SDK的美顏功能是怎麼實現的?
- 影片直播美顏sdk趣味功能的實現流程
- C#使用Socket實現分散式事件匯流排,不依賴第三方MQC#分散式事件MQ
- 直播美顏SDK介面的閃白功能實現流程
- 直播美顏SDK祛痘功能是怎麼實現的?
- 直播美顏SDK的功能實現流程——美白、磨皮
- 手把手教你實現Android RecyclerView上拉載入功能AndroidView
- 手把手教你實現boost::bind
- Flutter實戰:手把手教你寫Flutter PluginFlutterPlugin
- PS教程:手把手教你打造一個超現實雲端特效特效
- [Brave]Java資料訪問層如何實現通用不依賴第三方的產品化分頁Java
- FFmpeg開發筆記(四十一)結合OBS與MediaMTX實現SRT直播推流筆記
- 直播美顏SDK中的美白功能是怎麼實現的?
- 神奇,聲網Web SDK還能這麼實現直播中美顏功能Web
- 手把手教你如何實現繼承繼承
- 30分鐘手把手教你學webpack實戰Web
- 手把手教你使用 ArkTS 中的 canvas 實現簽名板功能Canvas
- rodert教你學FFmpeg實戰這一篇就夠了
- 直播短影片平臺最常用的美顏SDK功能是什麼?功能如何實現?
- 手把手教你用Java實現AOPJava
- Flutter:手把手教你實現一個仿QQ側滑選單的功能Flutter
- 手把手教你實現 Tree 元件搜尋過濾功能,乾貨滿滿!元件
- Java Web(十一) 分頁功能的實現JavaWeb
- 不依賴 Spring,你會如何自實現 RabbitMQ 訊息的消費(一)SpringMQ
- ffmpeg+nginx+rtmp+web實現視訊直播網站NginxWeb網站
- 【Python實戰】手把手超詳細教程教你Scrapy爬達蓋爾社群,有彩蛋Python
- 手把手教你實現H5微信分享H5
- 手把手教你實現一個引導動畫動畫
- 手把手教你實現一個完整的 PromisePromise
- Vite 實戰:手把手教你寫一個 Vite 外掛Vite
- wasm + ffmpeg實現前端擷取視訊幀功能ASM前端
- Java ffmpeg 實現影片加文字/圖片水印功能Java
- app直播原始碼如何實現直播間紅包功能APP原始碼
- 基於聲網 Flutter SDK 實現互動直播Flutter
- 波場(Tron)監控區塊交易記錄(http 版本,不依賴 sdk)HTTP