天天看點

android studio rtsp,Android 在AndroidStudio實作RTSP流截圖

1:建立android項目我這裡使用的語音是java

2:在項目gradle上導入包:

(1)implementation group: 'org.bytedeco', name: 'javacv', version: '1.4.1'

(2)implementation group: 'org.bytedeco', name: 'javacpp', version: '1.4.1'

(3)implementation group: 'org.bytedeco.javacpp-presets', name: 'opencv', version: '3.4.1-1.4.1', classifier:'android-arm'

(4)implementation group: 'org.bytedeco.javacpp-presets', name: 'ffmpeg', version: '3.4.2-1.4.1', classifier: 'android-arm'

*注意*剛開始在實作這個功能的時候也參考了很多大佬的CSDN部落格,大多是導入後面三個包,但是一直在報Could not initialize class org.bytedeco.javacpp.avutil 這個錯誤,後面導入了第一個包後這個錯誤才沒有發生。

3:流截圖代碼實作:

public void getFrame(String url) {

new Thread(() -> {

AndroidFrameConverter bitmapConverter = new AndroidFrameConverter();

FrameGrabber grabber = new FFmpegFrameGrabber(url);

if (start(grabber)) {

try {

Frame img = grabber.grabFrame()

Bitmap bitmap= bitmapConverter.convert(img);

} catch (Exception e) {

e.printStackTrace();

//System.err.println("丢幀");

}

} else {

Log.e("有結果:", "失敗");

}

stop(grabber);

}).start();

}

public static boolean start(FrameGrabber grabber) {

try {

grabber.start();

return true;

} catch (org.bytedeco.javacv.FrameGrabber.Exception e2) {

System.err.println("第一次打開失敗,重新開始");

try {

grabber.restart();

return true;

} catch (org.bytedeco.javacv.FrameGrabber.Exception e) {

try {

System.err.println("重新開機抓取器失敗,正在關閉抓取器...");

grabber.stop();

} catch (org.bytedeco.javacv.FrameGrabber.Exception e1) {

System.err.println("停止抓取器失敗!");

}

}

}

return false;

}

public static boolean stop(FrameGrabber grabber) {

try {

grabber.flush();

grabber.stop();

return true;

} catch (org.bytedeco.javacv.FrameGrabber.Exception e) {

return false;

} finally {

try {

grabber.stop();

} catch (org.bytedeco.javacv.FrameGrabber.Exception e) {

System.err.println("關閉抓取器失敗");

}

}

}