#import "PBJMediaWriter.h"
#import "PBJVisionUtilities.h"
#import "PBJVision.h"
#import <UIKit/UIDevice.h>
#import <MobileCoreServices/UTCoreTypes.h>
#define LOG_WRITER 0
#if !defined(NDEBUG) && LOG_WRITER
# define DLog(fmt, ...) NSLog((@"writer: " fmt), ##__VA_ARGS__);
#else
# define DLog(...)
#endif
@interface PBJMediaWriter ()
{
AVAssetWriter *_assetWriter;
AVAssetWriterInput *_assetWriterAudioInput;
AVAssetWriterInput *_assetWriterVideoInput;
NSURL *_outputURL;
CMTime _audioTimestamp;
CMTime _videoTimestamp;
}
@end
@implementation PBJMediaWriter
@synthesize delegate = _delegate;
@synthesize outputURL = _outputURL;
@synthesize audioTimestamp = _audioTimestamp;
@synthesize videoTimestamp = _videoTimestamp;
#pragma mark - getters/setters
- (BOOL)isAudioReady
{
AVAuthorizationStatus audioAuthorizationStatus = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeAudio];
BOOL isAudioNotAuthorized = (audioAuthorizationStatus == AVAuthorizationStatusNotDetermined || audioAuthorizationStatus == AVAuthorizationStatusDenied);
BOOL isAudioSetup = (_assetWriterAudioInput != nil) || isAudioNotAuthorized;
return isAudioSetup;
}
- (BOOL)isVideoReady
{
AVAuthorizationStatus videoAuthorizationStatus = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo];
BOOL isVideoNotAuthorized = (videoAuthorizationStatus == AVAuthorizationStatusNotDetermined || videoAuthorizationStatus == AVAuthorizationStatusDenied);
BOOL isVideoSetup = (_assetWriterVideoInput != nil) || isVideoNotAuthorized;
return isVideoSetup;
}
- (NSError *)error
{
return _assetWriter.error;
}
#pragma mark - init
- (id)initWithOutputURL:(NSURL *)outputURL
{
self = [super init];
if (self) {
NSError *error = nil;
_assetWriter = [AVAssetWriter assetWriterWithURL:outputURL fileType:(NSString *)kUTTypeMPEG4 error:&error];
if (error) {
DLog(@"error setting up th
AVAssetWriter保存MP4(PBJVision)
最新推荐文章于 2023-07-26 17:30:15 发布
本文介绍了如何利用AVAssetWriter来保存MP4文件,并重点强调了设置shouldOptimizeForNetworkUse属性对于实现边下边播时的快速播放至关重要。
摘要由CSDN通过智能技术生成