欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程语言 > c/c++ >内容正文

c/c++

java hevc和heif_iOS 影音新格式 HEIF HEVC

发布时间:2025/3/20 c/c++ 59 豆豆
生活随笔 收集整理的这篇文章主要介绍了 java hevc和heif_iOS 影音新格式 HEIF HEVC 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

苹果在 iOS 11 的发布会上,推出了两种新的媒体格式 HEIF HEVC,都是为了保证画质的情况下,大大减少视频、照片的大小。

一、简介

HEVC全称 High Efficiency Video Coding(高效率视频编码),是比H.264更加优秀的一种视频压缩标准(也称为 H.265)。HEVC 在低码率视频压缩上,提升质量、减少容量和节省带宽方面都有突出表现,因此除了拍摄占用的容量减少外,在视频通话时也能更加流畅清晰。

HEIF: 高效率图像文件格式(英语:High Efficiency Image File Format, HEIF;也称高效图像文件格式)是一个用于单张图像或图像序列的文件格式。它由运动图像专家组(MPEG)开发,并在MPEG-H Part 12(ISO/IEC 23008-12)中定义。用于HEVC关键帧的处理上,因此它同样可以用更少的容量来存储画质更好的照片,在连拍、动图和色彩变化不大的照片上效果尤其明显。

HEIF规范也定义了高效率视频编码(HEVC)编码的内嵌图像和HEVC编码的图像序列的存储方式,其中以受约束的方式应用帧间预测。

HEIF文件与ISO基本媒体文件格式(ISOBMFF,ISO/IEC 14496-12)兼容,并且还可以包括其他媒体流,例如定时的文本和音频。

HEIF 文件可以包含 GIF 动图、HDR 相片、连拍、Live Photo。

HEIF扩展名:.heif、.heic。

互联网媒体类型:image/heif、image/heic、image/heif-sequence、image/

二、对代码的影响

识别HEIF

识别HEIF文件的方法和识别GIF一样,对比文件UTI(uniformTypeIdentifier)

- (BOOL)isHeif:(PHAsset *)asset

{

__block BOOL isHEIF = NO;

NSArray *resourceList = [PHAssetResource assetResourcesForAsset:asset];

[resourceList enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {

PHAssetResource *resource = obj;

NSString *UTI = resource.uniformTypeIdentifier;

if ([UTI isEqualToString:AVFileTypeHEIF] || [UTI isEqualToString:AVFileTypeHEIC]) {

isHEIF = YES;

*stop = YES;

}

}];

return isHEIF;

}

检测设备是否支持硬解码 HEVC

VTIsHardwareDecodeSupported(kCMVideoCodecType_HEVC)

系统选图对 HEIF 的支持

UIImagePickerController 添加了一个枚举类型:

typedef enum UIImagePickerControllerImageURLExportPreset : NSInteger {

UIImagePickerControllerImageURLExportPresetCompatible = 0,

UIImagePickerControllerImageURLExportPresetCurrent

} UIImagePickerControllerImageURLExportPreset;

@property(nonatomic) UIImagePickerControllerImageURLExportPreset imageExportPreset NS_AVAILABLE_IOS(11_0); // default value is UIImagePickerControllerImageExportPresetCompatible.

其中,UIImagePickerControllerImageURLExportPresetCompatible会把 HEIF 格式转成 JPEG。UIImagePickerControllerImageURLExportPresetCurrent会显示原始的编码格式。

三、编码转换

HEIF 格式转 JPEG 格式

[[PHImageManager defaultManager] requestImageDataForAsset:asset options:nil resultHandler:^(NSData * _Nullable imageData, NSString * _Nullable dataUTI, UIImageOrientation orientation, NSDictionary * _Nullable info) {

if ([dataUTI isEqualToString:AVFileTypeHEIF] || [dataUTI isEqualToString:AVFileTypeHEIC]) {

CIImage *ciImage = [CIImage imageWithData:imageData];

CIContext *context = [CIContext context];

NSData *jpgData = [context JPEGRepresentationOfImage:ciImage colorSpace:ciImage.colorSpace options:@{}];

} else {

}

}];

JPEG 格式转 HEIF 格式

NSData * UIImageHEICRepresentation(UIImage *const image, const CGFloat compressionQuality)

{

NSData *imageData = nil;

if (@available(iOS 11.0, *)) {

if (image) {

NSMutableData *destinationData = [NSMutableData new];

CGImageDestinationRef destination = CGImageDestinationCreateWithData((__bridge CFMutableDataRef)destinationData, (__bridge CFStringRef)AVFileTypeHEIC, 1, NULL);

if (destination) {

NSDictionary *options = @{(__bridge NSString *)kCGImageDestinationLossyCompressionQuality: @(compressionQuality)};

CGImageDestinationAddImage(destination, image.CGImage, (__bridge CFDictionaryRef)options);

CGImageDestinationFinalize(destination);

imageData = destinationData;

CFRelease(destination);

} else {

// 创建失败,说明设备不支持 HEIF 写入

}

}

}

return imageData;

}

《新程序员》:云原生和全面数字化实践50位技术专家共同创作,文字、视频、音频交互阅读

总结

以上是生活随笔为你收集整理的java hevc和heif_iOS 影音新格式 HEIF HEVC的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。