我試圖讓來自AVCaptureVideoDataOutput
和AVCaptureAudioDataOutput
CMSampleBufferRef
。委託AVCaptureVideoDataOutput和AVCaptureAudioDataOutput
AVCamRecorder.h
#import <AVFoundation/AVFoundation.h>
@interface AVCamRecorder : NSObject {
}
@property (nonatomic,retain) AVCaptureVideoDataOutput *videoDataOutput;
@property (nonatomic,retain) AVCaptureAudioDataOutput *audioDataOutput;
@end
AVCamRecorder.m
#import "AVCamRecorder.h"
#import <AVFoundation/AVFoundation.h>
@interface AVCamRecorder (VideoDataOutputDelegate) <AVCaptureVideoDataOutputSampleBufferDelegate>
@end
@interface AVCamRecorder (AudioDataOutputDelegate) <AVCaptureAudioDataOutputSampleBufferDelegate>
@end
-(id)initWithSession:(AVCaptureSession *)aSession
{
self = [super init];
if (self != nil) {
//AudioDataoutput
AVCaptureAudioDataOutput *aAudioDataOutput = [[AVCaptureAudioDataOutput alloc] init];
//VideoDataoutput
AVCaptureVideoDataOutput *aMovieDataOutput = [[AVCaptureVideoDataOutput alloc] init];
if ([aSession canAddOutput:aAudioDataOutput]) {
[aSession addOutput:aAudioDataOutput];
}
if ([aSession canAddOutput:aMovieDataOutput]) {
[aSession addOutput:aMovieDataOutput];
}
[aAudioDataOutput setSampleBufferDelegate:self queue:dispatch_get_main_queue()];
[aMovieDataOutput setSampleBufferDelegate:self queue:dispatch_get_main_queue()];
[self setAudioDataOutput:aAudioDataOutput];
[self setVideoDataOutput:aMovieDataOutput];
[self setSession:aSession];
}
return self;
}
@implementation AVCamRecorder (VideoDataOutputDelegate)
- (void)captureOutput:(AVCaptureOutput *)captureOutput
didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer
fromConnection:(AVCaptureConnection *)connection
{
NSLog(@"VideoDataOutputDelegate = %@", captureOutput);
}
@end
@implementation AVCamRecorder (AudioDataOutputDelegate)
- (void)captureOutput:(AVCaptureOutput *)captureOutput
didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer
fromConnection:(AVCaptureConnection *)connection
{
NSLog(@"AudioDataOutputDelegate = %@", captureOutput);
}
@end
奇怪的是,我在 「@implementation AVCamRecorder (AudioDataOutputDelegate)
」
AudioDataOutputDelegate = <AVCaptureVideoDataOutput: 0x208a7df0>
我切換了視頻數據的「@implementation AVCamRecorder (VideoDataOutputDelegate)
」和「@implementation AVCamRecorder (VideoDataOutputDelegate)
」我的訂單,並得到了
VideoDataOutputDelegate = <AVCaptureVideoDataOutput: 0x208a7df0>
看來,我不能設置2「captureOutput:didOutputSampleBuffer:fromConnection:
」。否則,數據將進入其中一個。
或者,我在設置「@implementation AVCamRecorder (VideoDataOutputDelegate)
」和「@implementation AVCamRecorder (AudioDataOutputDelegate)
」時犯了錯誤嗎?
我想我不需要單獨回撥,但我只是想知道什麼是錯的。
非常感謝您的幫助。
非常感謝!它對我來說。其實,我不明白類別。我真的很感激。 – user1428156