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
如果觉得我的文章对你有用,请随意赞赏
扫一扫支付
上一篇