2017-03-27 1 views
1

Je développe une application Android. Dans mon application, je voulais enregistrer en direct la vidéo en direct en utilisant ffmpeg bibliothèque.J'écris un code pour enregistrer la vidéo en direct en direct, mais cela ne fonctionne pas. Il montre une erreur. Si quelqu'un le sait, aidez-moi s'il vous plaît.Impossible de copier la vidéo en streaming RTSP dans android en utilisant FFMPEG

C'est le code que je suis habitué à enregistrer des vidéos

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());} 

quand j'exécute ce bloc, je reçois le message d'erreur suivant .

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 

Répondre

1

Finalement, j'ai fondé la solution. Dans Android, vous devez transmettre les paramètres de la méthode FFMpeg.execute() sous la forme de tableaux de chaînes.

utiliser le code suivant

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());} 
+0

Son code great.This fonctionne. Merci beaucoup. – Astro