1、问题
在读取本地视频的时候,特别是高分辨率视频会出现视频非常卡顿的现象,刚开始开发的时候一味地最求效率,肯定是在代码中有耗时的操作,所以打开jvisualvm.exe对CPU耗时情况进行监听,用抽样器监听后得到
果然发现Mat2BuffImg方法有异常耗时的情况
二、解决
ImageInfo imageInfo = ImageFactory.bufferedImage2GrayImageInfo(Mat2BufImg(mat,".png"));
最开始的写法,这种写法是把Mat转为BufferImg再转为ImageInfo,导致多了一步操作,因改为
ImageInfo imageInfo = new ImageInfo();
imageInfo.setImageFormat(ImageFormat.CP_PAF_GRAY);
imageInfo.setWidth(mat.cols());
imageInfo.setHeight(mat.rows());
imageInfo.setImageData(mat2Byte(mat,".png"));
直接实例化对象,再通过mat转byte[]的方式得到ImageInfo
/**
* Mat转换成byte数组
*
* @param matrix 要转换的Mat
* @param fileExtension 格式为 ".jpg", ".png", etc
* @return
*/
public static byte[] mat2Byte(Mat matrix, String fileExtension) {
MatOfByte mob = new MatOfByte();
Imgcodecs.imencode(fileExtension, matrix, mob);
byte[] byteArray = mob.toArray();
return byteArray;
}
到这里再运行视频流已正常速度播放。
最后修改于 2021-01-28 13:03:03
如果觉得我的文章对你有用,请随意赞赏
扫一扫支付

