我想为添加的PHAsset(视频的最后一帧)设置自定义缩略图,但找不到解决方案.如何添加添加视频的自定义缩略图?当我打开时,我想在Photos应用程序中看到我的自定义缩略图.
另外,我知道如何使用AVAssetImageGenerator从视频中获取一些图像,但是我想在照片应用程序中看到我的缩略图.
解决方法
方法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];
另请参阅Apple forum Post.阅读整个线程的代码和用法.
方法2:手动写字节…
Short version :
找到以下原子(标签)… moov去udta去Meta然后ilst,这里,只需添加一个covr原子(24个字节),然后是jpeg图像的字节(字节FF D8直到FF D9).更新moov,udta,ilst和covr的大小条目(32位整数)以反映新添加的字节).而已.成品.
Expanded version :
(注/推荐):
•理想地检查十六进制编辑器中的测试MP4(d /加载一个空闲的)按照以下所述的字节进行跟踪.
•阅读:Apple’s Quicktime Format specs和Cimmaron System’s MP4 atoms guide.
1) Find
moov@H_404_44@
bytes…
(在十六进制编辑器中查看)您的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
这些是开放字节,重要的部分是具有字节6D 64 61 74的意思是mdat(作为ASCII字符,在显示字节视图的右侧).我不使用iOS,所以我希望它使mdat第一&然后将moov放置在文件的末端,在这种情况下,很容易添加额外的字节,而不会破坏文件.如果您在文件的前64个字节中看到mdat,则可以在下面继续我的建议.
编辑:(如果不是默认默认)似乎你可以把mdat原子放在文件前面(前64个字节),如果你的exportSession设置有:
exportSession.shouldOptimizeForNetworkUse = NO;
要查找moov,请在ASCII字母“mdat”之前读取前4个字节(作为一个整数).在上面的例子中,这是00 00 99 70(= 39280字节)的4字节整数.这意味着从6D .. 64 .. 61开始总共跳过39280 8个字节,依此类推.一旦跳过,接下来的4个字节应该是6D 6F 6F 76(ASCII中的“moov”).注意这个偏移/位置作为moov开始.
2) Add
covr@H_404_44@
bytes…
从moov开始,读取以下字节搜索:
>找到条目udta作为字节75 64 74 61.注意以备参考:这个位置 – 4作为udta大小pos的开始.
>查找条目Meta为字节6D 65 74 61.
>查找条目ilst为字节69 6C 73 74.注意以备参考:此位置 – 4作为第一个大小的起始位置.
注意:如果找不到任何上述条目,则必须创建这些字节.检查此atoms guide的第14页之前,以了解上述原子需要哪些字节(值).
>在ilst的结尾添加四个零字节00 00 00 00(稍后将更新为总covr大小).作为参考,请注意这4个字节的位置作为covr size pos.
>通过写入字节/整数作为63 6F 76 72添加条目covr.
>添加字节00 00 ED EA 64 61 74 61 00 00 00 0D 00 00 00 00然后它准备好JPEG图像字节.
3) Add JPEG bytes…
粘贴JPEG图像的字节.这些字节以FF D8开头,以FF D9结束.注意这些字节的总量为jpeg大小.
4) Update sizes…
>为covr:转到covr size pos的起始,将四个00 00 00 00字节替换为十六进制结果的jpeg size 20计算.
>对于ilst:转到ilst size pos字节的开始,将这四个字节替换为当前ilst size的第六个结果covr size 4计算.
> udta:转到udta size pos字节的开始,用当前udta size covr size 4计算的十六进制结果替换这四个字节.
conclusion
通过在程序/工具中启用一些缩略图视图来测试MP4文件.您应该看到jpg现在用作编辑的mp4文件的图标.
PS:我不为iOS代码(没有Swift或Objective-C知识),所以我不能给你一个示例代码,只有建立字节的建议.甚至可以使用十六进制编辑器手动完成此任务.您作为iOS编码器的主要功能是能够将字节写入现有文件,并重新保存为新的文件名(或在代码完善时覆盖).