Tag: avfoundation

如何正确地停止和删除iOS11中的audioTapProcessor

我正在使用类似于apple的audioTap示例的audioTapProcessor 。 基本上,audioTapProcessor被创build并添加到audioMix: MTAudioProcessingTapRef audioProcessingTap; if (noErr == MTAudioProcessingTapCreate(kCFAllocatorDefault, &callbacks, kMTAudioProcessingTapCreationFlag_PreEffects, &audioProcessingTap)) { audioMixInputParameters.audioTapProcessor = audioProcessingTap; CFRelease(audioProcessingTap); audioMix.inputParameters = @[audioMixInputParameters]; _audioMix = audioMix; } 当创buildaudioMix时,它被添加到avPlayer的currentItem中: self.avPlayer.currentItem.audioMix = audioMix; 当我完成audioTapProcessor时,我清除对audioTapProcessor和audioMix的引用: if (self.avPlayer.currentItem.audioMix){ for (AVMutableAudioMixInputParameters *inputParameter in player.currentItem.audioMix.inputParameters) { inputParameter.audioTapProcessor = nil; } player.currentItem.audioMix = nil; } 这触发tap_UnprepareCallback和tap_FinalizeCallback函数,并且audioTapProcessor对象被取消分配。 这个工作没有任何问题,直到iOS11几天前出来。 在iOS11设备上,我有时会在ClientProcessingTapManager线程上收到EXC_BAD_ACCESS错误。 该错误发生在AVFoundation的其中一个类中,所以我无法debugging。 该错误发生在ClientProcessingTap :: PerformTap的某处。 我已经将日志logging添加到了audioTapcallback函数,并且它看起来像在ClientProcessingTapManager线程上只执行tap_ProcessCallBack。 我认为有时在此线程上触发audioTapProcessor的tap_ProcessCallback方法,而实际的AudioTapProcessor已在另一个线程上解除分配。 我的问题是:如何正确地停止audioTapProcessor并将其从内存中删除? […]

我们可以使用语音框架而videoplayback进行?

我正在使用AVPlayerController播放video,同时我想使用语音命令来停止video。 所以我试图使用语音框架相同,但我得到错误com.apple.coreaudio.avfaudio',原因:'所需的条件是false:format.sampleRate == hwFormat.sampleRate' 在使用Speech框架进行logging时,我尝试使用类别进行会话 [AVAudioSession setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionMixWithOthers error:&sessionError]; 在recognitionTaskWithRequest中也没有得到任何回应 无论我需要检查降噪algorithm还是其他一些我必须做的工作。 这可能吗? 任何帮助或build议将不胜感激。

使用AVFoundation在时间域中logging位置

我跟随了很多教程,关于在AVFoundation中录制的每个教程都只涵盖了录制video或audio或者这两者。 我想在同一个时间域logging一些位置,如video/audio在单独的轨道上。 该位置的航点只有5个属性 – 纬度,经度,高度,开始时间,持续时间,并且它会经常改变5秒的logging。 这个录音是为了演示的目的,我需要的function,如stream,前进,跳过,暂停。 任何人有一些想法如何使用AVFoundation框架呢?

video预览期间的屏幕截图失败

我正在尝试使用AVFoundation(AVCaptureDeviceInput和AVCaptureVideoDataOutput)进行video预览时捕获屏幕, 启动预览: func startCamera(){ var screenSize = UIScreen.mainScreen().bounds.size; self.previewView = UIView(frame: CGRectMake(0, 0, UIScreen.mainScreen().bounds.size.width, UIScreen.mainScreen().bounds.size.height)); self.previewView.contentMode = UIViewContentMode.ScaleAspectFit self.view.addSubview(previewView); session.sessionPreset = AVCaptureSessionPresetHigh let devices = AVCaptureDevice.devices(); // Loop through all the capture devices on this phone for device in devices { // Make sure this particular device supports video if (device.hasMediaType(AVMediaTypeVideo)) { // Finally check […]

混合附件B MPEG-TS时,SPS和PPS的audio是否相当? 什么是“DecoderInfo”?

我正在使用Bento4库将附件B TS(MPEG-2传输stream)文件与分别从VideoToolbox和AVFoundation生成的h264video和AACaudiostream合并为HLS(HTTP实时stream传输)的源数据,stream。 这个问题不一定是Bento4特有的:我试图理解底层的概念,以便我可以完成任务,最好通过使用苹果库。 到目前为止,我已经想通过从AP4_AvcSampleDescription获取各种数据来创buildCMVideoFormatDescriptionRef ,最重要的是通过分别使用CMVideoFormatDescriptionGetH264ParameterSetAtIndex索引0和1来生成SPS和PPS,我可以将它们作为字节缓冲区Bento4。 太棒了,这就是我需要的所有头文件信息,所以我可以问Bento4将video复制到ts文件中! 现在我试图将audio复合到相同的文件。 我正在使用CMAudioFormatDescriptionRef获取所需的信息来构build我的AP4_MpegAudioSampleDescription ,Bento4使用它来制作必要的QTprimefaces和标题。 但是,如果这些字段是“解码器信息”字节缓冲区,则不需要解释它是什么,或者从数据生成一个代码。 我本来希望有一个CMAudioFormatDescriptionGetDecoderInfo什么的,但是我找不到这样的东西。 在任何苹果库中是否有这样的function? 还是有一个很好的规范,我还没有find如何生成这些数据? 或者,我是否走错了路? 有一个更简单的方法来从Mac / iOS代码库中复合ts文件吗?

PlayBack不同的声音

我正在iphone应用程序工作,我需要多个声音,例如成人的声音变成儿童的声音。 我如何实现它,我使用AVFoundation播放语音。 Plz提供了一些编码。

Objective-C如何添加覆盖到video使用AVFoundation?

我一直在试图为video添加叠加效果,现在我只是无法弄清楚为什么当我保存时,video向左旋转了九十度。 我一直在努力解决这个问题,但是和我一样接近。 目前会议预设位于AVCaptureSessionPreset1920x1080。 当我旋转video缩小,我不得不把它翻译到中心。 旋转后无法使video全屏。 请有人帮助我真的很需要它。 我会做任何事! AVURLAsset *videoAsset = [[AVURLAsset alloc] initWithURL:self.video options:nil]; AVMutableComposition *mixComposition = [AVMutableComposition composition]; AVMutableCompositionTrack *compositionVideoTrack = [mixComposition addMutableTrackWithMediaType:AVMediaTypeVideo preferredTrackID:kCMPersistentTrackID_Invalid]; AVAssetTrack *clipVideoTrack = [[videoAsset tracksWithMediaType:AVMediaTypeVideo] lastObject]; [compositionVideoTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, videoAsset.duration) ofTrack:clipVideoTrack atTime:kCMTimeZero error:nil]; [compositionVideoTrack setPreferredTransform:[[[videoAsset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0] preferredTransform]]; CGSize videoSize = [clipVideoTrack naturalSize]; NSLog(@"WIDTH: %f HEIGHT: %f", clipVideoTrack.naturalSize.width, clipVideoTrack.naturalSize.height); CALayer *parentLayer […]

远程的MP3文件需要花费很多时间在迅速的ios中播放

我有麻烦了。 我想在我的应用程序中播放一个远程的MP3文件。 但需要花费大量的时间(大约5-6分钟)的MP3文件播放。 为什么? 任何人都可以build议我该怎么做? import UIKit import AVFoundation class TestViewController: UIViewController, AVAudioPlayerDelegate { var player:AVAudioPlayer = AVAudioPlayer() override func viewDidLoad() { super.viewDidLoad() } @IBAction func play(sender: AnyObject) { let url = "http://www.example.com/song.mp3" let fileURL = NSURL(string: url.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLQueryAllowedCharacterSet())) let soundData = NSData.dataWithContentsOfURL(fileURL, options: nil, error: nil) var error: NSError? self.player = AVAudioPlayer(data: soundData, error: &error) […]

在button上播放声音(AVaudio播放器)返回零string参数

我试图按button播放声音。 以前,我使用的Audiotoolbox工作得很好,具有相同的文件types。 但是,我需要改变使用AvAudioPlayer,因为它不使用铃声音量。 所以上周我开发了一个使用audio播放器播放声音的理解。 我使用完全相同的代码在我的应用程序上工作。 不过,尽pipe尝试无数次这个应用程序将无法使用AVFoundation / AudioPlayer。 我试图添加新的文件,新的button,改变文件的扩展名。 文件名在资源文件夹中。 我没有拼错这个名字。 确切的问题是,当我试图find我的文件时,它返回一个零string参数: 终止应用程序,由于未捕获exception“NSInvalidArgumentException”,原因:' * – [NSURL initFileURLWithPath:]:nilstring参数' 我已经看过关于这个每个论坛的post,但没有一个会帮助我。 我只能认为我的项目中的潜在问题可能是资源文件夹,而不是实际的AVAudioPlayer代码,因为我有这个确切的代码在另一个项目上工作相同。 任何帮助将不胜感激,因为我难住。 这是重要的代码: 这是在我的 @interface MainViewController : UIViewController @property (strong, nonatomic) AVAudioPlayer *theAudio; – (IBAction)test:(id)sender; 这是在我的 @synthesize theAudio; – (IBAction)test:(id)sender { NSString *path = [[NSBundle mainBundle] pathForResource:@"beast" ofType:@"wav" ]; self.theAudio=[[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:nil]; [self.theAudio play]; } […]

在iOS上处理video时跳过帧

我正在尝试处理本地video文件,只是对像素数据做一些分析。 没有什么是输出。 我目前的代码遍历video的每一帧,但我实际上想一次跳过〜15帧,以加快速度。 有没有办法跳过帧而不解码他们? 在Ffmpeg中,我可以简单地调用av_read_frame,而不用调用avcodec_decode_video2。 提前致谢! 这是我现在的代码: – (void) readMovie:(NSURL *)url { [self performSelectorOnMainThread:@selector(updateInfo:) withObject:@"scanning" waitUntilDone:YES]; startTime = [NSDate date]; AVURLAsset * asset = [AVURLAsset URLAssetWithURL:url options:nil]; [asset loadValuesAsynchronouslyForKeys:[NSArray arrayWithObject:@"tracks"] completionHandler: ^{ dispatch_async(dispatch_get_main_queue(), ^{ AVAssetTrack * videoTrack = nil; NSArray * tracks = [asset tracksWithMediaType:AVMediaTypeVideo]; if ([tracks count] == 1) { videoTrack = [tracks objectAtIndex:0]; […]