我正在使用jcodec
。
我正在尝试将cover art
设置为 mp4 文件,但是无法正常工作。我所做的是遵循的。
fun AppCompatActivity.setAlbumCover(filePath: String) {
try {
val file = File(filePath)
val bitmap = ThumbnailUtils.createVideoThumbnail(file.absolutePath, MediaStore.Video.Thumbnails.MINI_KIND)
if (bitmap != null) {
val byteArrayOutputStream = ByteArrayOutputStream()
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, byteArrayOutputStream)
val byteArray = byteArrayOutputStream.toByteArray()
val base64Str = Base64.encodeToString(byteArray, Base64.DEFAULT)
if (base64Str != null) {
val mediaMeta = MetadataEditor.createFrom(file)
if (mediaMeta != null) {
val meta = mediaMeta.keyedMeta
if (meta != null) {
meta["coverart"] = MetaValue.createString(base64Str)
}
mediaMeta.save(false)
}
}
}
} catch (e: Exception) {
e.printStackTrace()
}
}
之后,我将此视频上传到服务器,并使用MediaMetadataRetriever::getEmbededPicture
从视频thumbnail
加载url
。它应该返回byte[]
而不是null
。
如何实现这一目标。
非常感谢。
答案 0 :(得分:1)
使用Itunes元数据,代码为0x636F7672。
例如:
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
coverBitmap.compress(Bitmap.CompressFormat.JPEG, 100,byteArrayOutputStream);
MetaValue coverMetaValue = MetaValue.createOther(MetaValue.TYPE_JPEG, byteArrayOutputStream.toByteArray());
MetadataEditor metadataEditor = MetadataEditor.createFrom(new File(url));
metadataEditor.getItunesMeta().put(0x636F7672 , coverMetaValue);
metadataEditor.save(false);