Samuel:
I am using JavaCV version 1.0, with the newest bug fixes from July 17, 2015. I use FFmpegFrameRecorder to successfully record videos and I also try to set that video's metaData using setVideoMetadata(key,value) and/or setMetadata(key,value). But when the new video is played back, using a player that utilizes FFmpegFrameGrabber's getVideoMetadata(key) and/or getMetadata(key) both methods return null. I am setting the "title" and "description" keys with applicable strings. I was under the understanding that this feature was included in the July 17th, 2015 files. I am doing something wrong in my calls or does this indeed work?
Recorder code:
recorder = new FFmpegFrameRecorder(vidFullFileName, mProfile.videoFrameWidth, mProfile.videoFrameHeight);
recorder.setVideoMetadata("title", "GolfCamHD");
recorder.setVideoMetadata("description", videoMap);
recorder.setMetadata("title", "GolfCamHD");
recorder.setMetadata("description", videoMap);
recorder.setFrameRate(fps);
recorder.setVideoBitrate(1000000);
recorder.setVideoQuality(10);
recorder.setVideoCodec( AV_CODEC_ID_H264);
recorder.setVideoOption("preset", "ultrafast");
recorder.setFormat("mp4");
frameTime = (1000000L / fps);
try {
recorder.start();
recording = true;
} catch (org.bytedeco.javacv.FrameRecorder.Exception e3) {
Log.e(TAG, "stopRec FrameRecorder.Exception ", e3);
}
@Override
public void onPreviewFrame(byte[] data, Camera camera) {
frameTimeStamp = 1000L * (System.currentTimeMillis() - startTime);
synchronized (mVideoRecordLock) {
if (recording && lastSavedframe != null && lastSavedframe.getFrameBytesData() != null && yuvIplimage != null) {
Log.v(TAG,"Writing Frame");
if (frameTimeStamp > recorder.getTimestamp()) {
recorder.setTimestamp(frameTimeStamp);
}
try {
yuvIplimage.getByteBuffer().put(lastSavedframe.getFrameBytesData());
recorder.record(converter.convert(yuvIplimage));
} catch (FFmpegFrameRecorder.Exception e) {
e.printStackTrace();
}
}
lastSavedframe = new SavedFrames(data,frameTimeStamp);
}
Player code:
grabber = FFmpegFrameGrabber.createDefault(directory); //grabs frames from just recorded video
grabber.setImageHeight(gheight);
grabber.setImageWidth(gwidth);
String title = grabber.getVideoMetadata("title");
String description = grabber.getVideoMetadata("description");
String title2 = grabber.getMetadata("title");
String description2 = grabber.getMetadata("description");
Log.e(TAG, "FFmpegFrameGrabber title is: " + title);
Log.e(TAG, "FFmpegFrameGrabber description is: " + description);
Log.e(TAG, "FFmpegFrameGrabber title2 is: " + title2);
Log.e(TAG, "FFmpegFrameGrabber description2 is: " + description2);