ffmpeg-android-java
ffmpeg-android-java copied to clipboard
Extract frames from HTTP streamed video without downloading entire file.
Hi, everyone. I want to extract frames from a streaming video (such as from youtube link). When I ran the below error has occurred. How to fix these bugs?
I ran it on Android.
String[] cmd = { "-i","https://r2---sn-ouu2j-ioqz.googlevideo.com/videoplayback?id=efc44c0db851e384&itag=22&source=youtube&requiressl=yes&mm=31,29&mn=sn-ouu2j-ioqz,sn-oguesnzl&ms=au,rdu&mv=m&pl=19&ei=qLFrXI7PEpno4gLd5IIQ&susc=yt&initcwndbps=713750&mime=video/mp4&ratebypass=yes&dur=532.433&lmt=1537615999778923&mt=1550561540&fvip=2&c=MWEB&ip=202.171.132.229&ipbits=0&expire=1550583304&sparams=ip,ipbits,expire,id,itag,source,requiressl,mm,mn,ms,mv,pl,ei,susc,initcwndbps,mime,ratebypass,dur,lmt&signature=297CF9E2B2C8140767430681FD101783C26E2F99.D3E5D049F02994C848E0A143F0A232F2E66239C7&key=yt8", "-ss", "5", "-frames:v", "1", Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).getAbsolutePath() + "/frame_youtube.jpg"};
execute(cmd);
/**
* execute cmd ffmpeg.
* @param cmd string commandline.
*/
private void execute(String[] cmd) {
mFFmpeg = FFmpeg.getInstance(this);
try {
mFFmpeg.execute(cmd, new FFmpegExecuteResponseHandler() {
@Override
public void onStart() {
Log.d(">>>>onStart", "onStart");
}
@Override
public void onProgress(String message) {
Log.d(">>>>onProgress", message);
}
@Override
public void onFailure(String message) {
Log.d(">>>>onFailure", message);
}
@Override
public void onSuccess(String message) {
Log.d(">>>>onSuccess", message);
}
@Override
public void onFinish() {
Log.d(">>>>onFinish", "onFinish");
}
});
} catch (FFmpegCommandAlreadyRunningException e) {
// Handle if FFmpeg is already running
Log.e(">>>FFMPEG", e.getMessage(), e);
}
}
/**
* load ffmpeg libs.
*/
private void loadFFmpeg() {
FFmpeg ffmpeg = FFmpeg.getInstance(this);
try {
ffmpeg.loadBinary(new LoadBinaryResponseHandler() {
@Override
public void onStart() {
Log.d(">>>>loadFFmpeg", "onStart");
}
@Override
public void onFailure() {
Log.d(">>>>loadFFmpeg", "onFailure");
}
@Override
public void onSuccess() {
Log.d(">>>>loadFFmpeg", "onSuccess");
}
@Override
public void onFinish() {
Log.d(">>>>loadFFmpeg", "onFinish");
}
});
} catch (FFmpegNotSupportedException e) {
// Handle if FFmpeg is not supported by device
Log.e(">>>loadFFMPEG", e.getMessage(), e);
}
}
Logs
2019-02-19 18:02:23.955 22039-22203/com.example.videoyoutube I/System.out: [/data/user/0/com.example.videoyoutube/files/ffmpeg, -i, https://r2---sn-ouu2j-ioqz.googlevideo.com/videoplayback?id=efc44c0db851e384&itag=22&source=youtube&requiressl=yes&mm=31,29&mn=sn-ouu2j-ioqz,sn-oguesnzl&ms=au,rdu&mv=m&pl=19&ei=qLFrXI7PEpno4gLd5IIQ&susc=yt&initcwndbps=713750&mime=video/mp4&ratebypass=yes&dur=532.433&lmt=1537615999778923&mt=1550561540&fvip=2&c=MWEB&ip=202.171.132.229&ipbits=0&expire=1550583304&sparams=ip,ipbits,expire,id,itag,source,requiressl,mm,mn,ms,mv,pl,ei,susc,initcwndbps,mime,ratebypass,dur,lmt&signature=297CF9E2B2C8140767430681FD101783C26E2F99.D3E5D049F02994C848E0A143F0A232F2E66239C7&key=yt8, -ss, 5, -frames:v, 1, /storage/emulated/0/DCIM/frame_youtube.jpg]
2019-02-19 18:02:23.955 22039-22203/com.example.videoyoutube I/System.out: null
2019-02-19 18:02:23.955 22039-22203/com.example.videoyoutube I/System.out: null
2019-02-19 18:02:23.956 22039-22203/com.example.videoyoutube I/System.out: Calling by::className:com.github.hiteshsondhi88.libffmpeg.ShellCommand MethodName:run