- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我尝试从 AVCaptureVideoDataOutput
和 AVCaptureAudioDataOutput
获取 CMSampleBufferRef
。
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)
”?
我想我不需要单独的回调,但我只是想知道哪里出了问题。
提前感谢您的帮助。
最佳答案
你在同一个类上定义了 2 个类别
AVCamRecorder (VideoDataOutputDelegate)
AVCamRecorder (AudioDataOutputDelegate)
声明相同的方法
- (void)captureOutput:(AVCaptureOutput *)captureOutput
didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer
fromConnection:(AVCaptureConnection *)connection;
这会导致未定义的行为。参见 Avoid Category Method Name Clashes在“使用 Objective-C 编程”指南中:
If the name of a method declared in a category is the same as a method in the original class, or a method in another category on the same class (or even a superclass), the behavior is undefined as to which method implementation is used at runtime.
...
因此您的设置无法正常工作。你可以改为
AVCamRecorder
本身作为音频 + 视频代理。关于objective-c - 代理 AVCaptureVideoDataOutput 和 AVCaptureAudioDataOutput,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14102548/
我尝试制作的应用程序的主要目标是点对点视频流。 (有点像使用蓝牙/WiFi 的 FaceTime)。 使用 AVFoundation,我能够捕获视频/音频样本缓冲区。然后我发送视频/音频样本缓冲区数据
我使用 AVCaptureVideoDataOutput 和 AVCaptureAudioDataOutput 使用 AVFoundation 录制音频/视频。但是当我将我的 AVCaptureAud
我运行了一个 AVCaptureVideoDataOutput session ,设置如下,效果很好,并将缓冲区记录到文件中。 我还想录制音频,但缓冲区中似乎没有任何音频,即使我已将麦克风添加为 ca
Apple 最近的示例代码之一使用相同的串行队列从 AVCaptureVideoDataOutput 和 AVCaptureAudioDataOutput 委托(delegate)接收示例。我需要知道
我尝试从 AVCaptureVideoDataOutput 和 AVCaptureAudioDataOutput 获取 CMSampleBufferRef。 AVCamRecorder.h #impo
我试图通过使用“AVFoundation”制作一个像藤蔓一样的视频应用程序。现在我可以通过 AVCaptureVideoDataOutput 保存视频并可以播放。但不知何故音频不工作,我不知道为什么。
我在使用 AVCaptureVideoDataOutput 和 AVCaptureAudioDataOutput 录制音频+视频时遇到延迟问题。有时视频会停顿几毫秒,有时音频与视频不同步。 我插入了一
我正在尝试创建一个对麦克风数据运行 FFT 的应用程序,因此我可以检查例如输入中最响亮的频率。 我看到有很多获取音频输入的方法(RemoteIO AudioUnit、AudioQueue 服务和 AV
我使用 AVFoundation 创建了一个相机,它能够使用 AVCaptureVideoDataOutput 录制视频和音频和 AVCaptureAudioDataOutput .我创建我的捕获 s
我正在尝试使用 AVCaptureAudioDataOutput 来分析音频输入,如 here 所述.这不是我自己想出来的东西,所以我正在复制这个例子,但我遇到了困难。 Swift 3 中的 Xcod
我正在开发 iOS 应用程序,我想在其中录制分段视频。我读过https://developer.apple.com/library/content/documentation/AudioVideo/C
我是一名优秀的程序员,十分优秀!