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