Tag: avfoundation

从AVAssetReaderOutput读取数据时iOS 5.0崩溃

我有这个代码片段用于从AVAssetReaderOutput读取数据,该方法在iOS 4.0中工作正常,但是在5.0中它崩溃到最后与不良访问,不知道为什么,任何人有任何input? AVAssetReaderOutput *output=[myOutputs objectAtIndex:0]; int totalBuff=0; while(TRUE) { CMSampleBufferRef ref=[output copyNextSampleBuffer]; if(ref==NULL) break; //copy data to file //read next one AudioBufferList audioBufferList; NSMutableData *data=[[NSMutableData alloc] init]; CMBlockBufferRef blockBuffer; CMSampleBufferGetAudioBufferListWithRetainedBlockBuffer(ref, NULL, &audioBufferList, sizeof(audioBufferList), NULL, NULL, 0, &blockBuffer); for( int y=0; y<audioBufferList.mNumberBuffers; y++ ) { AudioBuffer audioBuffer = audioBufferList.mBuffers[y]; Float32 *frame = audioBuffer.mData; NSLog(@"Gonna write %d", […]

使用MPMovieController或AVFoundation可以使用NSURLProtocol的子类播放video?

我目前正试图播放一个具有在自定义NSURLProtocol子类中定义的自定义scheme的URL。 最初我使用MPMoviePlayerController试图完成这个工作,但是在遇到问题并检查堆栈溢出后,我发现MPMoviePlayerController不能按预期处理NSURLProtocol子类。 如何使用自定义NSURLProtocol来播放电影? 因此,我决定看看AVFoundation框架,但是,似乎这似乎并不奏效。 我只想知道这是可能的,还是我想穿过墙壁? 使用AVFoundation,我使用的方法如下所示。 可能值得一提的是,这对于在互联网上托pipe的video使用标准URL时有效,但不适用于自定义NSURLProtocol。 // this doesn't work //AVPlayer *player = [[AVPlayer alloc] initWithURL:[NSURL urlWithString:@"custom URL scheme"]]; // this works AVPlayer *player = [[AVPlayer alloc] initWithURL:[NSURL urlWithString:@"some url to video on remote server"]]; AVPlayerLayer *layer = [AVAVPlayerLayer playerLayerWithPlayer:player]; // configure the layer [self.view.layer addSublayer:layer]; [player play]; 为了从定义的NSURLProtocol子类中播放,是否有不同的东西需要完成?

iOS AVFoundation导出会话缺lessaudio

我正在使用iOS AVFoundation框架,我能够成功合并video轨道,图像叠加和文本叠加。 但是,我的输出文件不能保持我的原始源video完整的audio。 如何确保来自其中一个video的audio来源保留在我创build的新video中? 编辑 *使用此代码有一个很好的例子,如何做到这一点创build一个video(与原始audio)。 在处理AVFoundationvideo时,我需要分开包含音轨。 希望这可以帮助别人。 AVAssetTrack *videoTrack = nil; AVAssetTrack *audioTrack = nil; CMTime insertionPoint = kCMTimeZero; if([[url tracksWithMediaType:AVMediaTypeVideo] count] != 0) { videoTrack = [url tracksWithMediaType:AVMediaTypeVideo][0]; } if([[url tracksWithMediaType:AVMediaTypeAudio] count] != 0) { audioTrack = [url tracksWithMediaType:AVMediaTypeAudio][0]; } // Insert the video and audio tracks from AVAsset if (videoTrack != nil) […]

使用AVMutableAudioMix调整资产内曲目的音量

我将一个AVMutableAudioMix应用于我创build的资产,资产通常包含3-5个音轨(无video)。 我们的目标是在整个播放时间内添加几个音量命令,也就是说我想在1秒时将音量设置为0.1,在2秒时将音量设置为0.5,然后在3秒时将其设置为0.1。 我只是现在试图用AVPlayer做这个,但是以后也会在将AVSession导出到一个文件时使用它。 问题是,它似乎只关心第一个卷命令,似乎忽略了所有后来的卷命令。 如果第一个命令是将音量设置为0.1,则该资源的其余部分将成为此音轨的永久音量。 尽pipe看起来应该可以添加任意数量的这些命令,但是AVMutableAudioMix的“inputParameters”成员实际上是一个NSArray,它是一系列AVMutableAudioMixInputParameter的。 任何人都明白这一点? 编辑:我想这部分了。 我可以在某个曲目中添加几个音量变化。 但时机似乎没有办法,我不知道如何解决这个问题。 例如,在5秒的时间内将音量设置为0.0,然后在10秒钟的时间点为1.0,然后在15秒钟的时候回到0.0,这样您就可以假定音量会在这些时间点迅速地开始和closures,但结果总是非常不可预测的,的声音正在进行,有时还在工作(如setVolume所预料的,突然的音量变化)。 如果有人有AudioMix的工作,请提供一个例子。

一起使用AVCaptureSession和AVAudioPlayer

我能够录制video并正确输出电影到文件。 但是,在尝试使用AVAudioPlayer播放某些audio时,我遇到了录像问题(无video输出)。 这是否意味着我不能同时使用AVCaptureSession和AVAudioPlayer? 这里是我的代码来创build捕获会话和播放audio。 video捕捉首先启动,然后在捕捉过程中,我想播放一些audio。 非常感谢您的帮助。 创build捕获会话以loggingvideo(带audio)的代码 – 输出到.mov文件: – (void)addVideoInput AVCaptureDevice *audioDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeAudio]; //… also some code for setting up videoDevice/frontCamera NSError *error; AVCaptureDeviceInput *videoIn = [AVCaptureDeviceInput deviceInputWithDevice:frontCamera error:&error]; AVCaptureDeviceInput *audioIn = [AVCaptureDeviceInput deviceInputWithDevice:audioDevice error:&error]; if (!error) { if ([captureSession canAddInput:audioIn]) [captureSession addInput:audioIn]; else NSLog(@"Couldn't add audio input."); if ([captureSession canAddInput:videoIn]) [captureSession […]

将video+生成的audio写入AVAssetWriterInput,audio口吃

我从iOS上的Unity应用程序生成video。 我使用iVidCap,它使用AVFoundation来做到这一点。 那边一切正常。 本质上,video是通过使用纹理渲染目标并将帧传递给Obj-C插件来渲染的。 现在我需要添加audio到video。 audio将是特定时间发生的声音效果,也可能是一些背景音效。 正在使用的文件实际上是Unity应用程序的内部资源。 我可能会写这些到电话存储,然后生成一个AVComposition,但我的计划是要避免这种情况,并在浮点格式缓冲区(从audio剪辑获取audio以浮点格式)复合audio。 我可能会稍后在飞行audio效果。 几个小时后,我设法录制audio,并播放video…但它结结巴巴。 目前,我只是在每个video帧的持续时间内生成一个方波,并将其写入AVAssetWriterInput。 之后,我将生成我实际需要的audio。 如果我生成一个大样本,我不会得到口吃。 如果我把它写成块(我更喜欢分配一个巨大的数组),那么audio块似乎相互剪辑: 我似乎无法弄清楚这是为什么。 我很确定我正在为audio缓冲区获取正确的时间戳,但也许我正在做这整个部分不正确。 或者我需要一些标志来让video同步到audio? 我不能看到这是问题,因为我可以在将audio数据提取到wav之后在波形编辑器中看到问题。 编写audio的相关代码: – (id)init { self = [super init]; if (self) { // [snip] rateDenominator = 44100; rateMultiplier = rateDenominator / frameRate; sample_position_ = 0; audio_fmt_desc_ = nil; int nchannels = 2; AudioStreamBasicDescription audioFormat; bzero(&audioFormat, sizeof(audioFormat)); audioFormat.mSampleRate = […]

在后台IOS中执行长时间运行的任务

我一直在做一个应用程序,用户可以使用AVFoundation录制video并发送到服务器,video的最大尺寸可达15M,具体取决于networking的速度和types,大约需要1到5分钟的时间将video传输到服务器。 我正在后台线程中将录制的video传输到服务器,以便用户可以在video上传到服务器的同时在应用上继续播放其他内容。 在阅读Apple Docs以在后台执行长时间运行的任务时 ,我发现只有less数types的应用程序可以在后台执行。 例如 audio – 应用程序在后台播放可听内容给用户。 (此内容包括使用AirPlay播放audio或video内容。) 它是否符合我的应用程序还在后台运行任务? 或者我需要在主线程上传输video?

获取* .movvideoIOS的缩略图

我想要获取与iPhone / iPAD拍摄的video(* .mov)的缩略图。 我正在尝试使用AVFoundation库,并得到这个错误: couldn't generate thumbnail, error:Error Domain=AVFoundationErrorDomain Code=-11822 "Cannot Open" UserInfo=0x15d90a30 {NSLocalizedDescription=Cannot Open, NSLocalizedFailureReason=This media format is not supported.} 码: NSArray *paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentDir=[paths objectAtIndex:0]; NSString *videoPath=[documentDir stringByAppendingPathComponent:[NSString stringWithFormat:@"videos/%@.mov",videoName]]; AVURLAsset *asset=[[AVURLAsset alloc] initWithURL:videoPath options:nil]; AVAssetImageGenerator *generator = [[AVAssetImageGenerator alloc] initWithAsset:asset]; generator.appliesPreferredTrackTransform=TRUE; CMTime thumbTime = CMTimeMakeWithSeconds(0,30); AVAssetImageGeneratorCompletionHandler handler = ^(CMTime requestedTime, […]

如何在iPhone中使用URL链接播放音乐文件?

我想用iPhone中的URL链接播放音乐文件。 但是,当我使用下面的代码,我得到错误,我没有得到我要去的地方错了。 任何人都可以纠正我? -(void)viewDidLoad { [super viewDidLoad]; NSString* resourcePath = @"http://192.167.1.104:8888/SHREYA.mp3"; //your url NSData *_objectData = [NSData dataWithContentsOfURL:[NSURL URLWithString:resourcePath]]; NSError *error; audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:_objectData error:&error]; audioPlayer.numberOfLoops = -1; if (audioPlayer == nil) NSLog([error description]); else [audioPlayer play]; }

时间轴AVPlayer进度条

AVPlayer是完全可定制的,不幸的是在AVPlayer有方便的方法来显示时间线进度条。 AVPlayer *player = [AVPlayer playerWithURL:URL]; AVPlayerLayer *playerLayer = [[AVPlayerLayer playerLayerWithPlayer:avPlayer] retain];[self.view.layer addSubLayer:playerLayer]; 我有一个进度条,指示播放video的方式,还有多less像MPMoviePlayer一样。 那么如何从AVPlayer获取video的时间轴以及如何更新进度条 build议我