Search code examples
androidffmpegandroid-ffmpeg

Can not copy RTSP streamed video in android using FFMPEG


I am developing an android application. In my application I wanted to record live streamed video using ffmpeg library.I write one code for record live streamed video but it does't work. It shows some error. If any one know this please help me.

This is the code I am used to record video

try {

            fFmpeg.execute(new String[]{"ffmpeg -i rtsp://192.168.1.1:6667/streamhd -acodec copy -vcode c copy"+String.valueOf(getCacheDir())+"/MyVideo.mp4"}, new ExecuteBinaryResponseHandler() {

                @Override
                public void onSuccess(String message) {
                    Log.d("fffffff", "FFmpeg cmd success");
                }

                @Override
                public void onFailure(String message) {
                    Log.d("ffffffffffff", message.toString());
                }
            });
        }catch (FFmpegCommandAlreadyRunningException e) {
            // Handle if FFmpeg is already running
            e.printStackTrace();
            Log.w(null,e.toString());}

when I execute this block I get the following error message.

03-27 12:48:47.109 2042-2042/com.steelmanpro.wifivideoscope D/ffffffffffff: ffmpeg version n3.0.1 Copyright (c) 2000-2016 the FFmpeg developers
                                                                          built with gcc 4.8 (GCC)


configuration: --target-os=linux --cross-   prefix=/home/vagrant/SourceCode/ffmpeg-android/toolchain-android/bin/arm-linux-androideabi- --arch=arm --cpu=cortex-a8 --enable-runtime-cpudetect --sysroot=/home/vagrant/SourceCode/ffmpeg-android/toolchain-android/sysroot --enable-pic --enable-libx264 --enable-libass --enable-libfreetype --enable-libfribidi --enable-libmp3lame --enable-fontconfig --enable-pthreads --disable-debug --disable-ffserver --enable-version3 --enable-hardcoded-tables --disable-ffplay --disable-ffprobe --enable-gpl --enable-yasm --disable-doc --disable-shared --enable-static --pkg-config=/home/vagrant/SourceCode/ffmpeg-android/ffmpeg-pkg-config --prefix=/home/vagrant/SourceCode/ffmpeg-android/build/armeabi-v7a --extra-cflags='-I/home/vagrant/SourceCode/ffmpeg-android/toolchain-android/include -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fno-strict-overflow -fstack-protector-all' --extra-ldflags='-L/home/vagrant/SourceCode/ffmpeg-android/toolchain-android/lib -Wl,-z,relro -Wl,-z,now -pie' --extra-libs='-lpng -lexpat -lm' --extra-cxxflags=

                                                                          libavutil      55. 17.103 / 55. 17.103
                                                                          libavcodec     57. 24.102 / 57. 24.102
                                                                          libavformat    57. 25.100 / 57. 25.100
                                                                          libavdevice    57.  0.101 / 57.  0.101
                                                                          libavfilter     6. 31.100 /  6. 31.100
                                                                          libswscale      4.  0.100 /  4.  0.100
                                                                          libswresample   2.  0.101 /  2.  0.101
                                                                          libpostproc    54.  0.100 / 54.  0.100
                                                                        Output #0, mp4, to 'ffmpeg -i rtsp://192.168.1.1:6667/streamhd -acodec copy -vcode c copy/data/data/com.steelmanpro.wifivideoscope/cache/MyVideo.mp4':
                                                                        Output file #0 does not contain any stream

Solution

  • Finally I founded the solution. In android you must pass parameters of FFMpeg.execute() method as String arrays.

    use the following code

     String[] cmd = {"-i" , "rtsp://192.168.1.1:6667/streamhd" , "-fs" , "25M" ,  "-b" , "900k" , "-vcodec" , "copy" , "-r" , "60" , "-y" ,"-movflags","+faststart",""+getNextFileName() } ;
    
     try {
    
                fFmpeg.execute(cmd, new ExecuteBinaryResponseHandler() {
    
    
                    @Override
                    public void onSuccess(String message) {
                        Log.d("fffffff", "FFmpeg cmd success");
                    }
    
                    @Override
                    public void onFailure(String message) {
                        Log.d("ffffffffffff", message.toString());
                    }
                    @Override
                    public void onProgress(String message) {
     }
                    @Override
                    public void onFinish() {
                        Log.d("finish",""+fFmpeg.isFFmpegCommandRunning());
    
                    }
    
                });
            }catch (FFmpegCommandAlreadyRunningException e) {
                // Handle if FFmpeg is already running
                e.printStackTrace();
                Log.w(null,e.toString());}