iOS-从相册选中一个视频并拿到视频的元数据
2017-09-04 18:38
1516 查看
从相册选中一个视频并拿到该视频的元数据信息
// 通过相册里选中的某一个视频获取他的元数据信息
- (void)getXMLFromSelectedVideoInAlbumWithPath:(NSURL *)mediaUrl andRefrenceURL:(NSURL *)refrenceUrl{
// 通过视频的 refrenceURL 获取PHFetchResult
PHFetchResult *fetchResult = [PHAsset fetchAssetsWithALAssetURLs:[NSArray arrayWithObject:refrenceUrl] options:nil];
if (fetchResult.count) {
PHAsset *videoAsset = (PHAsset*)fetchResult.firstObject;
PHVideoRequestOptions *phvideoResOption = [[PHVideoRequestOptions alloc]init];
[[PHImageManager defaultManager] requestAVAssetForVideo:videoAsset options:phvideoResOption resultHandler:^(AVAsset * _Nullable asset, AVAudioMix * _Nullable audioMix, NSDictionary * _Nullable info) {
AVFormatContext *pinputFormatCtx = NULL;
int ret = avformat_open_input(&pinputFormatCtx, mediaUrl.absoluteString.UTF8String, NULL, NULL);
if (ret == 0) {
av_dump_format(pinputFormatCtx,0,mediaUrl.absoluteString.UTF8String, 0);
AVDictionaryEntry *tag = NULL;
tag = av_dict_get(pinputFormatCtx->metadata, "comment", NULL, 0);
if(tag) {
if(tag->key && strlen(tag->value)>10) {
if(strncmp(tag->key, "TVUComment:", 11)) {
NSString *filemeta = [[NSString alloc]initWithCString:tag->value+11 encoding:NSUTF8StringEncoding];
NSMutableString *mStr = [NSMutableString stringWithFormat:@"<TVUMetaData xmlns=\"http://www.tvunetworks.com\">%@</TVUMetaData>",filemeta];
NSString *xmlName = [[TVUMovManager defaultManager] generateXMLFileBasedOnTheTimeInTheMetadata:mStr];
NSString *checkStr = [NSString stringWithFormat:@"Documents/videoMetadata/%@",xmlName];
NSString *metadataXML = [[NSString alloc]initWithContentsOfFile:[NSHomeDirectory() stringByAppendingPathComponent:checkStr] encoding:NSUTF8StringEncoding error:nil];
if (metadataXML == nil) {
NSString *documentPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *xmlPath = [documentPath stringByAppendingString:[NSString stringWithFormat:@"/videoMetadata/%@",xmlName]];
NSError *error = nil;
[mStr writeToFile:xmlPath atomically:YES encoding:NSUTF8StringEncoding error:&error];
if(error)
{
log4cplus_error("Metadata", "%smetaData write failure:%s",__func__,error.debugDescription.UTF8String);
}else{
metadataXML = [[NSString alloc]initWithContentsOfFile:[NSHomeDirectory() stringByAppendingPathComponent:checkStr] encoding:NSUTF8StringEncoding error:nil];
}
}
if (metadataXML != nil) {
log4cplus_error("Metadata", "%sSelected video's meta
4000
data is %s",__func__,metadataXML.UTF8String);
NSData *xmlData = [metadataXML dataUsingEncoding:NSUTF8StringEncoding];
[self XMLParserWithData:xmlData];
}
}
}
}
avformat_close_input(&pinputFormatCtx);
}
}];
}
}
// 通过相册里选中的某一个视频获取他的元数据信息
- (void)getXMLFromSelectedVideoInAlbumWithPath:(NSURL *)mediaUrl andRefrenceURL:(NSURL *)refrenceUrl{
// 通过视频的 refrenceURL 获取PHFetchResult
PHFetchResult *fetchResult = [PHAsset fetchAssetsWithALAssetURLs:[NSArray arrayWithObject:refrenceUrl] options:nil];
if (fetchResult.count) {
PHAsset *videoAsset = (PHAsset*)fetchResult.firstObject;
PHVideoRequestOptions *phvideoResOption = [[PHVideoRequestOptions alloc]init];
[[PHImageManager defaultManager] requestAVAssetForVideo:videoAsset options:phvideoResOption resultHandler:^(AVAsset * _Nullable asset, AVAudioMix * _Nullable audioMix, NSDictionary * _Nullable info) {
AVFormatContext *pinputFormatCtx = NULL;
int ret = avformat_open_input(&pinputFormatCtx, mediaUrl.absoluteString.UTF8String, NULL, NULL);
if (ret == 0) {
av_dump_format(pinputFormatCtx,0,mediaUrl.absoluteString.UTF8String, 0);
AVDictionaryEntry *tag = NULL;
tag = av_dict_get(pinputFormatCtx->metadata, "comment", NULL, 0);
if(tag) {
if(tag->key && strlen(tag->value)>10) {
if(strncmp(tag->key, "TVUComment:", 11)) {
NSString *filemeta = [[NSString alloc]initWithCString:tag->value+11 encoding:NSUTF8StringEncoding];
NSMutableString *mStr = [NSMutableString stringWithFormat:@"<TVUMetaData xmlns=\"http://www.tvunetworks.com\">%@</TVUMetaData>",filemeta];
NSString *xmlName = [[TVUMovManager defaultManager] generateXMLFileBasedOnTheTimeInTheMetadata:mStr];
NSString *checkStr = [NSString stringWithFormat:@"Documents/videoMetadata/%@",xmlName];
NSString *metadataXML = [[NSString alloc]initWithContentsOfFile:[NSHomeDirectory() stringByAppendingPathComponent:checkStr] encoding:NSUTF8StringEncoding error:nil];
if (metadataXML == nil) {
NSString *documentPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *xmlPath = [documentPath stringByAppendingString:[NSString stringWithFormat:@"/videoMetadata/%@",xmlName]];
NSError *error = nil;
[mStr writeToFile:xmlPath atomically:YES encoding:NSUTF8StringEncoding error:&error];
if(error)
{
log4cplus_error("Metadata", "%smetaData write failure:%s",__func__,error.debugDescription.UTF8String);
}else{
metadataXML = [[NSString alloc]initWithContentsOfFile:[NSHomeDirectory() stringByAppendingPathComponent:checkStr] encoding:NSUTF8StringEncoding error:nil];
}
}
if (metadataXML != nil) {
log4cplus_error("Metadata", "%sSelected video's meta
4000
data is %s",__func__,metadataXML.UTF8String);
NSData *xmlData = [metadataXML dataUsingEncoding:NSUTF8StringEncoding];
[self XMLParserWithData:xmlData];
}
}
}
}
avformat_close_input(&pinputFormatCtx);
}
}];
}
}
相关文章推荐
- iOS获取相册视频文件封面图 选取手机中的音频、视频文件并导出数据。
- iOS 如何拿到相册中的视频文件
- iOS开发之仿微博视频边下边播之自定义AVPlayer播放器, 边下边播解剖。视频处理流程,建立连接-请求数据-统筹数据-解码数据-视频呈现
- ios学习--获取通过UIImagePackerController获取的系统相册 图片&视频 的名称信息
- 【iOS】一个完整的简单的调用系统相机和相册设置头像
- ios快速将显卡中数据读出压缩成视频--cocos2dx扩展
- iOS做一个iPhone相册,每个图片都能放大缩小并且翻到第⼆张图时,再翻回来就变成原来的大 ⼩.使⽤UIPageControl与UIScrollView结合.
- ios学习--ios将摄像头捕获的视频数据转为jpeg格式 .
- iOS开发网络篇—实现一个视频播放客户端小应用(三)
- ios选取相册视频,过滤掉所有图片!
- iOS 视频录制 包括预览图片与视频还有写入自己自定义的App相册 微信小视频
- EasyUI配置当点击一个datagrid的checkbox选中或取消选中记录的时候刷新另一个datagrid数据的方法
- ios avfoundation 合并音频到一个视频文件 avurlassettrack
- [置顶] 基于iOS的网络音视频实时传输系统(三)- VideoToolbox编码音视频数据为H264、AAC
- iOS 多个按钮选中一个
- iOS 一个在UDP/TCP通信时,对16进制、10进制、NSData等数据之间的转换发送等处理的工具类库,一行代码将16进制字符串轻松转换成UDP需要的指令数据
- iOS学习之路09 - 多媒体(音频、视频、相机、相册)
- [IOS]从相册获取图片和视频进行上传
- iOS-OC-合并视频(两个视频和成一个视频)
- iOS开发之获取系统相册中的图片与视频(内带url转换)