AVFoundation – AVMetadataItem 获取媒体属性元数据

目录

  • 一.前言
    • 1.AVAsset
    • 2.AVAssetTrack
    • 3.AVComposition / AVMutableComposition
    • 4.AVMutableVideoComposition
    • 5.AVMutableCompositionTrack
    • 6.AVMutableVideoCompositionLayerInstruction
    • 7.AVMutableVideoCompositionInstruction
    • 8.AVAssetExportSession
  • 二.AVMetadataItem 简介
  • 三.使用 availableMetadataFormats 获取元数据
  • 四.使用 metadata 获取元数据
  • 五.编辑元数据
  • 六.猜你喜欢

零基础 Object-C 学习路线推荐 : Object-C 学习目录 >> Object-C 基础

零基础 Object-C 学习路线推荐 : Object-C 学习目录 >> Object-C 线程

零基础 Object-C 学习路线推荐 : Object-C 学习目录 >> OpenGL ES

零基础 Object-C 学习路线推荐 : Object-C 学习目录 >> GPUImage

零基础 Object-C 学习路线推荐 : Object-C 学习目录 >> AVFoundation

零基础 Object-C 学习路线推荐 : Object-C 学习目录 >> CocoaPods

一.前言

1.AVAsset

Assets 可以来自一个文件或用户的相册,可以理解为多媒体资源,通过 URL 作为一个 asset 对象的标识. 这个 URL 可以是本地文件路径或网络流;

2.AVAssetTrack

AVAsset 包含很多轨道 **AVAssetTrack **的结合,如 audio, video, text, closed captions, subtitles…

3.AVComposition / AVMutableComposition

**使用 AVMutableComposition 类可以增删 AVAsset 来将单个或者多个 AVAsset 集合到一起,用来合成新视频。**除此之外,若想将集合到一起的视听资源以自定义的方式进行播放,需要使用 AVMutableAudioMix 和 AVMutableVideoComposition 类对其中的资源进行协调管理;

4.AVMutableVideoComposition

AVFoundation 类 API 中最核心的类是 AVVideoComposition / AVMutableVideoComposition 。

AVVideoComposition / AVMutableVideoComposition 对两个或多个视频轨道组合在一起的方法给出了一个总体描述。它由一组时间范围和描述组合行为的介绍内容组成。这些信息出现在组合资源内的任意时间点。

AVVideoComposition / AVMutableVideoComposition 管理所有视频轨道,可以决定最终视频的尺寸,裁剪需要在这里进行;

5.AVMutableCompositionTrack

多个 AVAsset 集合到一起合成新视频中轨道信息,有音频轨、视频轨等,里面可以插入各种对应的素材(画中画,水印等);

6.AVMutableVideoCompositionLayerInstruction

AVMutableVideoCompositionLayerInstruction 主要用于对视频轨道中的一个视频处理缩放、模糊、裁剪、旋转等;

7.AVMutableVideoCompositionInstruction

表示一个指令,决定一个 timeRange 内每个轨道的状态,每一个指令包含多个 AVMutableVideoCompositionLayerInstruction ;而 AVVideoComposition 由多个 AVVideoCompositionInstruction 构成;

AVVideoCompositionInstruction 所提供的最关键的一段数据是组合对象时间轴内的时间范围信息。这一时间范围是在某一组合形式出现时的时间范围。要执行的组全特质是通过其 AVMutableVideoCompositionLayerInstruction 集合定义的。

8.AVAssetExportSession

AVAssetExportSession 主要用于导出视频;

二.AVMetadataItem 简介

AVAssetAVAssetTrack 都可以实现查询相关元数据的功能.一般使用 AVAsset 提供的元数据当涉及获取曲目一级元数据等情况时会使用 AVAssetTrack ,使用 AVAsset 获取元数据相关如下:

/*  包含着当前视频常见格式类型的元数据     */
@property (nonatomic, readonly) NSArray<AVMetadataItem *> *commonMetadata;//  包含当前视频所有格式类型的元数据.
@property (nonatomic, readonly) NSArray<AVMetadataItem *> *metadata API_AVAILABLE(macos(10.10), ios(8.0), tvos(9.0), watchos(1.0));//  包含当前视频所有可用元数据的格式类型元数据的格式类型在AVMetadataFormat中定义了很多种,常见的有title、creator、subject、publisher等.
@property (nonatomic, readonly) NSArray<AVMetadataFormat> *availableMetadataFormats;

AVMetadataFormat 如下:

// Metadata common keysAVF_EXPORT AVMetadataKey const AVMetadataCommonKeyTitle ;AVF_EXPORT AVMetadataKey const AVMetadataCommonKeyCreator;AVF_EXPORT AVMetadataKey const AVMetadataCommonKeySubject;AVF_EXPORT AVMetadataKey const AVMetadataCommonKeyDescription;AVF_EXPORT AVMetadataKey const AVMetadataCommonKeyPublisher;AVF_EXPORT AVMetadataKey const AVMetadataCommonKeyContributor;AVF_EXPORT AVMetadataKey const AVMetadataCommonKeyCreationDate;AVF_EXPORT AVMetadataKey const AVMetadataCommonKeyLastModifiedDate;AVF_EXPORT AVMetadataKey const AVMetadataCommonKeyType;AVF_EXPORT AVMetadataKey const AVMetadataCommonKeyFormat;AVF_EXPORT AVMetadataKey const AVMetadataCommonKeyIdentifier;AVF_EXPORT AVMetadataKey const AVMetadataCommonKeySource;AVF_EXPORT AVMetadataKey const AVMetadataCommonKeyLanguage;AVF_EXPORT AVMetadataKey const AVMetadataCommonKeyRelation;AVF_EXPORT AVMetadataKey const AVMetadataCommonKeyLocation;AVF_EXPORT AVMetadataKey const AVMetadataCommonKeyCopyrights;AVF_EXPORT AVMetadataKey const AVMetadataCommonKeyAlbumName;AVF_EXPORT AVMetadataKey const AVMetadataCommonKeyAuthor;AVF_EXPORT AVMetadataKey const AVMetadataCommonKeyArtist;AVF_EXPORT AVMetadataKey const AVMetadataCommonKeyArtwork;AVF_EXPORT AVMetadataKey const AVMetadataCommonKeyMake;AVF_EXPORT AVMetadataKey const AVMetadataCommonKeyModel ;AVF_EXPORT AVMetadataKey const AVMetadataCommonKeySoftware ;AVF_EXPORT AVMetadataKey const AVMetadataCommonKeyAccessibilityDescription;

三.使用 availableMetadataFormats 获取元数据

/******************************************************************************************/
//@Author:猿说编程
//@Blog(个人博客地址): www.codersrc.com
//@File:C语言教程 - AVMetadataItem 获取媒体属性元数据
//@Time:2021/07/29 07:30
//@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
/******************************************************************************************/NSURL* url = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"456.mp3" ofType:nil]];AVURLAsset* asset = [[AVURLAsset alloc] initWithURL:url options:nil];for (AVMetadataFormat item in [asset availableMetadataFormats]) {NSArray *medata = [asset metadataForFormat:item];for (AVMetadataItem *mitem in medata) {NSLog(@"%@:%@",mitem.key,mitem.value);}
}/*
2021-07-24 23:22:28.863338+0800 LearnAVFoundation[7405:497502] TXXX:3923013_396752
2021-07-24 23:22:28.863393+0800 LearnAVFoundation[7405:497502] TCON:3923013_396752
2021-07-24 23:22:28.863429+0800 LearnAVFoundation[7405:497502] TSSE:Lavf56.4.101
2021-07-24 23:22:28.863464+0800 LearnAVFoundation[7405:497502] TPOS:1
2021-07-24 23:22:28.863499+0800 LearnAVFoundation[7405:497502] TRCK:12
2021-07-24 23:22:28.863529+0800 LearnAVFoundation[7405:497502] TPE1:Thia Megia
2021-07-24 23:22:28.863574+0800 LearnAVFoundation[7405:497502] APIC:{length = 665140, bytes = 0x89504e47 0d0a1a0a 0000000d 49484452 ... 49454e44 ae426082 }
2021-07-24 23:22:28.863606+0800 LearnAVFoundation[7405:497502] COMM:163 key(Don't modify):L64FU3W4YxX3ZFTmbZ+8/cmlcJixcHCmHiX1THVPt/hhwCr8IK4+AdU6ba2JAq6yLF2az6pftnczEio2AkbRn47o8pfzLEbtKa3vNxCKaBpQujCz48iUDx0+FASY522oYNHmaeewFYBc+xLPSfsyaUgHaQaa/ojLxzzWUVv50Mg/I2IoOKyxPTUquetcGKXGgEofzvAcSlem6yEo7nkM9Nkmbhv7/ne7NlU5GvpG8nOvoBYZiG5otuvxV8pc7ti7ATYNINAs3qHiA2LTuJ9l6CxYtCboFlRr29BVyJSH1eMjIA9m04AEobEgVsuiyG+VXTNeh8imOV8WG268fh5dRxD0EEYDscUALQfptmS3TWSoyM7LF6ASZYn7aBZNkheSYNjgijkkEAt31UpVbNbLjW+HyJwvJyJ/Tls9A9h0PFfmIbeSTrjenxpMz22eRkw/WM3snECea8IhyNFe71F0VXmiZFi5/A6aiBv2EJrHFDKQWD1ktANXSTiTcjmLIEIb7b8cQdI8quSJAZ02VcS4zA==
2021-07-24 23:22:28.863647+0800 LearnAVFoundation[7405:497502] TIT2:Colors Of The Wind
2021-07-24 23:22:28.863676+0800 LearnAVFoundation[7405:497502] TALB:American Idol Top 12 Season 10
*/

四.使用 metadata 获取元数据

/******************************************************************************************/
//@Author:猿说编程
//@Blog(个人博客地址): www.codersrc.com
//@File:C语言教程 - AVMetadataItem 获取媒体属性元数据
//@Time:2021/07/29 07:30
//@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
/******************************************************************************************/NSURL* url = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"456.mp3" ofType:nil]];AVURLAsset* asset = [[AVURLAsset alloc] initWithURL:url options:nil];[asset loadValuesAsynchronouslyForKeys:@[@"metadata"] completionHandler:^{AVKeyValueStatus commonStatus = [asset statusOfValueForKey:@"metadata" error:nil];if (commonStatus == AVKeyValueStatusLoaded) {// 歌曲名称AVMetadataItem *titleItem  = [AVMetadataItem metadataItemsFromArray:asset.metadata filteredByIdentifier:AVMetadataCommonIdentifierTitle].firstObject;// 演唱者AVMetadataItem *artistItem = [AVMetadataItem metadataItemsFromArray:asset.metadata filteredByIdentifier:AVMetadataCommonIdentifierArtist].firstObject;// 专辑名称AVMetadataItem *albumItem  = [AVMetadataItem metadataItemsFromArray:asset.metadata filteredByIdentifier:AVMetadataCommonIdentifierAlbumName].firstObject;NSLog(@"%@ : %@", titleItem.key,  titleItem.value);NSLog(@"%@ : %@", artistItem.key, artistItem.value);NSLog(@"%@ : %@", albumItem.key,  albumItem.value);}
}];/*
2021-07-24 23:25:12.442039+0800 LearnAVFoundation[7441:500002] TIT2 : Colors Of The Wind
2021-07-24 23:25:12.442086+0800 LearnAVFoundation[7441:500002] TPE1 : Thia Megia
2021-07-24 23:25:12.442113+0800 LearnAVFoundation[7441:500002] TALB : American Idol Top 12 Season 10
*/

五.编辑元数据

AVAsset 是一个不可变类,如果要保存元数据的修改,使用 AVAssetExportSession 导出一个新的资源副本以及元数据改动。

AVAssetExportSession 用于将 AVAsset 内容根据导出预设条件进行转码,并将导出资源写到磁盘。它提供了多个功能来实现将一种格式转换为另一种格式、修订资源的内容、修改资源的音频和视频行为、写入新的元数据。

创建一个 AVAssetExportSession 实例需要提供资源和导出预设。导出预设用于确定导出内容的质量、大小等属性。创建导出会话后,还要指定导出内容地址 outputURL ,最后调用 exportAsynchronouslyWithCompletionHandler 开始导出。


跳转阅读全文…


**注意:**AVAssetExportPresetPassthrough 可以修改存在的元数据信息,不过它不能添加新的元数据,添加元数据唯一方法是使用转码预设值。

六.猜你喜欢

  • AVAsset 加载媒体
  • AVAssetTrack 获取视频 音频信息
  • AVMetadataItem 获取媒体属性元数据
  • AVAssetImageGenerator 截图
  • AVAssetImageGenerator 获取多帧图片
  • AVAssetExportSession 裁剪/转码
  • AVPlayer 播放视频
  • AVPlayerItem 管理资源对象
  • AVPlayerLayer 显示视频
  • AVQueuePlayer 播放多个媒体文件
  • AVComposition AVMutableComposition 将多个媒体合并
  • AVVideoComposition AVMutableVideoComposition 管理所有视频轨道

未经允许不得转载:猿说编程 » AVFoundation – AVMetadataItem 获取媒体属性元数据

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/524643.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

全面剖析企业私有云

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者 |孙杰本文转载自公众号&#xff1a;华章计算机在以AWS、Google、阿里等为代表的公有云发展的同时&#xff0c;很多大型企业出于数据安全性、系统稳定性、软硬件自主权、对自主可控以及TCO低的考虑&#xff0c;更加倾向于建设企…

AVFoundation – AVAssetImageGenerator 截图

目录 一.前言 1.AVAsset2.AVAssetTrack3.AVComposition / AVMutableComposition4.AVMutableVideoComposition5.AVMutableCompositionTrack6.AVMutableVideoCompositionLayerInstruction7.AVMutableVideoCompositionInstruction8.AVAssetExportSession 二.AVAssetImageGenerato…

React之props批量传递

<!DOCTYPE html> <html> <head> <meat charset"UTF-8"> <title>2_props批量传递</title> </head> <body> <!-- 准备好一个容器 --> <div id"test1"></div> <div id"test2&qu…

趣挨踢 | 如何修改个人简历?一些过来人的经验

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者 | 汕大小吴出处&#xff1a;https://www.nowcoder.com/discuss/154151一、前言又到了招聘的季节&#xff0c;看到很多师弟师妹们不太懂得如何写简历来展现自己&#xff0c;这里我想给出我个人的一些建议。因为我的简历修改了很…

C/C++ _wcsupr_s 函数 – unicode 字符串小写转大写 - C语言零基础入门教程

目录 一._wcsupr_s 函数简介二._wcsupr_s 函数实战三.注意问题三.猜你喜欢 零基础 C/C 学习路线推荐 : C/C 学习目录 >> C 语言基础入门 零基础 C/C 学习路线推荐 : C/C 学习目录 >> C 面向对象 零基础 C/C 学习路线推荐 : C/C 学习目录 >> C 设计模式 零基…

React之props限制

<!DOCTYPE html> <html> <head> <meat charset"UTF-8"> <title>2_props限制</title> </head> <body> <!-- 准备好一个容器 --> <div id"test1"></div> <div id"test2"&…

msyql之事务

--事务 --转账 create database shop character set utf8 collate utf8_general_ci use shop create table account( id int(3) not null auto_increment, NAMEvarchar(30) not null, moneydecimal(9,2) not null, primary key(id) )engineinnodb default cha…

云评测 | OpenStack智能运维解决方案 @文末有福利!

戳蓝字“CSDN云计算”关注我们哦&#xff01;文章摘自 | 《OpenStack架构分析与实践》谈到OpenStack&#xff0c;一个难以避免的话题就是运维&#xff0c;对于OpenStack的运维而言&#xff0c;随着其项目的不断增多&#xff0c;传统的“人肉运维”方式显然不能满足当下及以后的…

C/C++ ceil 函数 - C语言零基础入门教程

目录 一.ceil 函数简介二.ceil 函数使用三.猜你喜欢 零基础 C/C 学习路线推荐 : C/C 学习目录 >> C 语言基础入门 零基础 C/C 学习路线推荐 : C/C 学习目录 >> C 面向对象 零基础 C/C 学习路线推荐 : C/C 学习目录 >> C 设计模式 零基础 C/C 学习路线推荐 :…

通信协议讲解

协议&#xff1a;约定&#xff0c;好比说的普通话 网络通信协议:速率&#xff0c;传输码率&#xff0c;代码结构&#xff0c;传输控制...... 问题&#xff1a;非常的复杂&#xff1f; 大事化小&#xff1a;分层&#xff01; TCP/IP协议簇&#xff1a;实际上是一组协议 重要…

要闻君说: 百度云喜提信息安全首证;紫光展锐携5G芯片进击2019MWC;OPPO首发5G手机惊艳亮相……...

关注并标星星CSDN云计算每周三次&#xff0c;打卡即read更快、更全了解泛云圈精彩newsgo go go 大家好&#xff01;偶是要闻君。活动多多、新闻不少&#xff0c;精神饱满的周一&#xff0c;学起来&#xff01;&#xff01;&#xff01;文/要闻君一年一度&#xff0c;十分重磅&a…

C/C++ floor 函数 - C语言零基础入门教程

目录 一.floor 函数简介二.floor 函数使用三.猜你喜欢 零基础 C/C 学习路线推荐 : C/C 学习目录 >> C 语言基础入门 零基础 C/C 学习路线推荐 : C/C 学习目录 >> C 面向对象 零基础 C/C 学习路线推荐 : C/C 学习目录 >> C 设计模式 零基础 C/C 学习路线推荐…

Tcp实现聊天讲解

客户端&#xff1a; 1.连接服务器Socket 2.发送消息 服务端&#xff1a; 1.建立服务端口ServerSocket 2.等待用户的连接accept 3.接收用的消息 package com.wuming.lesson02;import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStr…

Spring精华问答 | Spring Boot有哪些优点?

戳蓝字“CSDN云计算”关注我们哦&#xff01;Spring是于2003 年兴起的一个轻量级的Java 开发框架&#xff0c;为了解决企业应用开发的复杂性而创建的。今天&#xff0c;我们一起来看看关于Spring更加有深度的问答吧。。1Q&#xff1a;Spring Boot有哪些优点&#xff1f;A&#…

C/C++ round 函数 - C语言零基础入门教程

目录 一.round 函数简介二.round 函数使用三.猜你喜欢 零基础 C/C 学习路线推荐 : C/C 学习目录 >> C 语言基础入门 零基础 C/C 学习路线推荐 : C/C 学习目录 >> C 面向对象 零基础 C/C 学习路线推荐 : C/C 学习目录 >> C 设计模式 零基础 C/C 学习路线推荐…

基于Kubernetes的持续部署方案

戳蓝字“CSDN云计算”关注我们哦&#xff01;文章转载自Docker方案概述本技术方案为基于Kubernetes为核心的持续部署&#xff08;下文简称CD&#xff09;方案&#xff0c;可以满足开发方的程序级日志查看分析&#xff0c;运维方的快速扩容与日常运维分析&#xff0c;并且可以保…

C/C++ abs 函数 - C语言零基础入门教程

目录 一.abs 函数简介二.abs 函数使用三.猜你喜欢 零基础 C/C 学习路线推荐 : C/C 学习目录 >> C 语言基础入门 零基础 C/C 学习路线推荐 : C/C 学习目录 >> C 面向对象 零基础 C/C 学习路线推荐 : C/C 学习目录 >> C 设计模式 零基础 C/C 学习路线推荐 : C…

Tcp实现文件上传

package com.wuming.lesson02;import java.io.*; import java.net.ServerSocket; import java.net.Socket;public class TcpServerDemo02 {public static void main(String[] args) throws Exception {//1.创服务ServerSocket serverSocket new ServerSocket(9000);//2.监听客…

C/C++ fabs 函数 - C语言零基础入门教程

目录 一.fabs 函数简介二.fabs 函数使用三.猜你喜欢 零基础 C/C 学习路线推荐 : C/C 学习目录 >> C 语言基础入门 零基础 C/C 学习路线推荐 : C/C 学习目录 >> C 面向对象 零基础 C/C 学习路线推荐 : C/C 学习目录 >> C 设计模式 零基础 C/C 学习路线推荐 :…

云存储精华问答 | 如何选择云迁移策略?

戳蓝字“CSDN云计算”关注我们哦&#xff01;云存储是在云计算概念上延伸和发展出来的一个新的概念&#xff0c;是一种新兴的网络存储技术&#xff0c;是指通过集群应用、网络技术或分布式文件系统等功能&#xff0c;将网络中大量各种不同类型的存储设备通过应用软件集合起来协…