And*_*nov 14 video thumbnails avfoundation ios photosframework
我使用AVFoundation生成视频.之后,我使用Photos Framework将视频写入照片库(之后获取PHAsset的实例).
我想为添加的PHAsset(视频的最后一帧)设置自定义缩略图,但无法找到解决方案.如何为添加的视频添加自定义缩略图?我想在我打开时在照片应用程序中看到我的自定义缩略图.
此外,我知道如何使用视频从视频中获取一些图像AVAssetImageGenerator,但我想在照片应用程序中看到我的缩略图.
要为MP4添加自定义缩略图:
方法1:使用AVMutableMetadataItem ...
AVMutableMetadataItem *item = [[AVMutableMetadataItem alloc] init];
item.keySpace = AVMetadataKeySpaceCommon;
item.key = AVMetadataCommonKeyArtwork;
item.value = UIImageJPEGRepresentation([[UIImage alloc] initWithContentsOfFile:[[NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0] stringByAppendingPathComponent:@".image"]]);
[newMetadataArray addObject:item];
assetWrtr.metadata = newMetadataArray;
[assetWrtr startWriting];
[assetWrtr startSessionAtSourceTime:kCMTimeZero];
Run Code Online (Sandbox Code Playgroud)
另见Apple论坛帖子.阅读整个线程以获取代码和用法的上下文.
方法2:手动写入字节...
短版:
找到以下原子(标签)... moov去udta去meta,然后ilst在这里,只需添加一个covr后跟您的JPEG图像的字节原子(24个字节)(字节数FF D8最多FF D9).更新的大小条目(32位整数)moov,udta,ilst和covr,以反映所述新添加的字节).而已.成品.
扩展版本:
(note/ recommended):
•理想情况下,在十六进制编辑器中检查测试MP4(d /加载一个空闲的)以跟随字节,如下所述.
• 阅读:Apple的Quicktime Format规范和Cimmaron System的MP4原子指南.
1)查找
moov字节...
(在十六进制编辑器中查看时)您的MP4字节应该如下所示.
00 00 00 20 66 74 79 70 69 73 6F 6D 00 00 02 00 ... ftypisom....
69 73 6F 6D 69 73 6F 32 61 76 63 31 6D 70 34 31 isomiso2avc1mp41
00 00 00 08 66 72 65 65 00 00 99 70 6D 64 61 74 ....free..™pmdat
Run Code Online (Sandbox Code Playgroud)
这些是开放字节,重要的部分是具有字节6D 64 61 74含义mdat(作为ASCII字符,在显示的字节视图的右侧).我不使用iOS,所以我希望它mdat先制作然后moov放在文件末尾,在这种情况下,很容易添加额外的字节而不会破坏文件.如果您mdat在文件的前64个字节内看到,那么您可以在下面继续我的建议.
编辑 :(如果默认情况下还没有这样mdat)如果您的exportSession设置有以下情况,您似乎可以将原子放在文件前面(前64个字节):
exportSession.shouldOptimizeForNetworkUse = NO;
Run Code Online (Sandbox Code Playgroud)
要查找moov,请在ASCII字母"mdat"之前读取前4个字节(作为一个整数).在上面的例子中,这是一个4字节的整数00 00 99 70(= 39280字节).这意味着跳过总共39280个+ 8从起始字节6D.. 64.. 61等.一旦跳过,接下来的4个字节应该是6D 6F 6F 76(ASCII中的"moov").注意这个偏移/位置为moov开头.
2)添加
covr字节...
从moov开始,读取以下字节搜索:
udta作为字节查找75 64 74 61.注意以供参考:this position - 4作为udta size pos的开头.meta作为字节查找6D 65 74 61.ilst作为字节查找69 6C 73 74.请注意以供参考:this position - 4作为尺寸pos的开始.注意:如果找不到上述任何条目,则必须创建这些字节.检查此原子指南的第14页以了解上述原子需要哪些字节(值).
ilst添加四个零字节00 00 00 00(稍后将更新为总covr大小).作为参考,请注意这4个字节的位置为covr size pos.covr通过写入字节/整数来添加条目63 6F 76 72.00 00 ED EA 64 61 74 61 00 00 00 0D 00 00 00 00然后它准备好JPEG图像字节.3)添加JPEG字节...
粘贴JPEG图像的字节.这些字节以开头FF D8和结尾FF D9.请注意这些字节的总量为jpeg大小.
4)更新尺寸......
covr:转到covr size pos的起始位置,00 00 00 00用十六进制jpeg size + 20计算结果替换四个字节.ilst:转到大小为pos字节的起始位置,用十六进制current ilst size + covr size + 4计算结果替换这四个字节.udta:转到udta size pos字节的起始位置,用十六进制current udta size + covr size + 4计算结果替换这四个字节.结论
通过在程序/工具中启用一些缩略图视图来测试MP4文件.您应该看到jpg现在用作编辑的mp4文件的图标.
PS:我没有代码用于iOS(没有Swift或Objective-C知识)所以我不能向您展示示例代码,仅提供有关创建字节的建议.甚至可以使用十六进制编辑器手动完成此任务.作为iOS编码器的主要功能是能够将字节写入现有文件并重新保存为新文件名(或者在完成代码时覆盖).
| 归档时间: |
|
| 查看次数: |
1186 次 |
| 最近记录: |