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:流截图代码实现:

/**
 * //     * 根据不同的流截图
 * //     *
 * //     * @param url
 * //
 */
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("关闭抓取器失败");
        }
    }
}

 

 

你可能感兴趣的:(Android 在AndroidStudio实现RTSP流截图)