Android利用ffmpeg產生推流
阿新 • • 發佈:2019-01-27
目標
在安卓手機客戶端有一個視訊檔案,利用ffmpeg產生推流。
藉助nginx-rtmp-module推送給另一客戶端(簡單起見用PC上的VLC)。
VLC播放這個視訊流。
本次實驗重點是第一步,即利用ffmpeg產生推流。
1、獲得ffmpeg庫
1/1 可以直接在ffmpeg官網下載原始碼,在Ubuntu下藉助NDK編譯得到.so庫。關於這點,可以參照https://trac.ffmpeg.org/wiki/CompilationGuide/Android
1/2 還可以藉助github上的開源專案https://github.com/WritingMinds/ffmpeg-android-java
2、使用ffmpeg庫
ffmpeg原本是一個支援多種平臺的命令列工具。
如果使用的是1/1方法。可以直接修改ffmpeg的main方法,以實現直接jni方式對ffmpeg的呼叫。
如果使用的是1/2方法。那就直接使用命令列輸入/輸出方式來呼叫ffmpeg。
這裡使用1/2方法
核心程式碼
try { ffmpeg.execute(new String[]{ "-re", "-i", "/sdcard/DCIM/Camera/test.avi", "-vcodec", "libx264", "-acodec", "aac", "-f", "flv", "-strict", "-2", "rtmp://192.168.42.248:1935/myapp/test"}, new ExecuteBinaryResponseHandler() { @Override public void onStart() { Log.i("yuyong", "onStart"); } @Override public void onProgress(String message) { Log.i("yuyong", "onProgress-->" + message); } @Override public void onFailure(String message) { Log.i("yuyong", "onFailure-->" + message); } @Override public void onSuccess(String message) { Log.i("yuyong", "onSuccess-->" + message); } @Override public void onFinish() { Log.i("yuyong", "onFinish"); } }); } catch (FFmpegCommandAlreadyRunningException e) { Log.i("yuyong", "FFmpegCommandAlreadyRunningException-->" + e.getMessage()); }
效果
效果