1. 程式人生 > >Android利用ffmpeg產生推流

Android利用ffmpeg產生推流

目標

在安卓手機客戶端有一個視訊檔案,利用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());
            }

效果


3、用VLC播放

效果