java cv android video record,android studio 用 Javacv 讀取視頻流

項目需求

按幀讀取視頻,修改幀,存儲視頻

javacv項目地址

android studio + javacv環境搭建

packagingOptions{

exclude ‘META-INF/maven/org.bytedeco.javacpp-presets/opencv/pom.properties’

exclude ‘META-INF/maven/org.bytedeco.javacpp-presets/ffmpeg/pom.properties’

exclude ‘META-INF/maven/org.bytedeco.javacpp-presets/opencv/pom.xml’

exclude ‘META-INF/maven/org.bytedeco.javacpp-presets/ffmpeg/pom.xml’

}

compile ‘org.bytedeco:javacv:1.1’

compile ‘org.bytedeco.javacpp-presets:opencv:3.0.0-1.1:android-arm’

compile ‘org.bytedeco.javacpp-presets:ffmpeg:2.8.1-1.1:android-arm’

527129800ff5bde516ee2aa471630348.png

准備工作完成開始開發//初始化

FrameGrabber videoGrabber = new FFmpegFrameGrabber(path);

videoGrabber.start();

//獲取視頻源的參數

double frameRate = videoGrabber.getFrameRate();

int sampleRate = videoGrabber.getSampleRate();

Frame frame;

int count = 0;

String ffmpeg_link = Environment.getExternalStorageDirectory()

.getAbsolutePath() + "/" + "obama.avi";

File result = new File(ffmpeg_link);

if (result.exists()) result.delete();

if (recorder == null) {

//初始化recorder

recorder = new FFmpegFrameRecorder(result,

videoGrabber.getImageWidth(), videoGrabber.getImageHeight(), videoGrabber.getAudioChannels());

recorder.setFormat("avi");

recorder.setSampleRate(sampleRate);

// Set in the surface changed method

recorder.setFrameRate(frameRate);

recorder.start();

}

while (true) {

//獲取下一幀數據

frame = videoGrabber.grabFrame();

if (frame == null) break;

if (frame.image == null) continue;

//轉碼 Frame ->Bitmap 操作Bitmap完成后Bitmap->Frame

AndroidFrameConverter bitmapConverter = new AndroidFrameConverter();

Bitmap currentImage = bitmapConverter.convert(frame);

currentImage = initScence(currentImage);//操作Bitmap,

Frame frame1 = bitmapConverter.convert();

//寫入recorder

recorder.record(frame1);

}

遇到的錯誤解決

錯誤列表

java.lang.UnsatisfiedLinkError: org.bytedeco.javacpp.avutil:指定arm平台的opencv和ffmpeg的庫文件

java.lang.UnsatisfiedLinkError: org.bytedeco.javacpp.avcodec:不能使用android sdk23的api,我改了targetSdkVersion: 22

Error:A problem occurred configuring project ‘:testjavacv’.

Could not find javacpp-presets-Mac OS X-x86_64.jar (org.bytedeco:javacpp-presets:1.2).

Searched in the following locations:

https://jcenter.bintray.com/org/bytedeco/javacpp-presets/1.2/javacpp-presets-1.2-Mac OS X-x86_64.jar

解決:

configurations {

all*.exclude group: ‘org.bytedeco’, module: ‘javacpp-presets’

}

標注

javacv Frame轉換成android BitmapAndroidFrameConverter bitmapConverter = new AndroidFrameConverter();

Bitmap bitmap = bitmapConverter.convert(frame);

Frame frame = bitmapConverter.convert(bitmap);

FFmpegFrameGrabber grabber = new FFmpegFrameGrabber("video.mp4");

AndroidFrameConverter converterToBitmap = new AndroidFrameConverter();

OpenCVFrameConverter.ToMat converterToMat = new OpenCVFrameConverter.ToMat();//.ToIplImage

// Grab an image Frame from the video file

Frame frame = grabber.grab();

// Perform a shallow copy to represent frame as a Mat

Mat mat = converterToMat.convert(frame);

// Do some processing on mat with OpenCV

Mat processedMat = ...

// Convert processedMat back to a Frame

frame = converterToMat.convert(processedMat);

// Copy the data to a Bitmap for display or something

Bitmap bitmap = converterToBitmap.convert(frame);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值