Tag: avfoundation

如何用AVPlayer播放MPEG-DASH?

我想知道AVPlayer传输DASH(通过HTTP进行dynamic自适应stream式传输)的方法是什么。 我看到这个AVFoundation(AVPlayer)支持的格式? 没有.vob或.mpg容器? 但它看起来AVFoundation不支持DASH。 这是示例链接https://d28ny1s9kzd6a.cloudfront.net/shark+video/shark.mpd

当另一个应用程序开始/停止播放audio时,可以通知我的应用程序?

我的iOS游戏有音乐和音效。 我想让用户听取他们自己的音乐来代替游戏的背景音乐。 一个简单的解决scheme是添加一个新的菜单项,禁用游戏的背景音乐。 但是,我想避免创build一个新的菜单项,除非我确信这种方法对用户来说更糟。 我目前的做法: 将audio会话类别设置为AVAudioSessionCategoryAmbient以允许游戏audio与iPod(或其他音乐应用程序)的混音播放。 在applicationDidBecomeActive ,检查[[AVAudioSession sharedInstance] isOtherAudioPlaying]并closures游戏的音乐,如果另一个应用程序在后台播放。 这似乎在大多数情况下工作。 游戏启动时,会中断后台播放的音乐应用程序。 如果您想播放自己的音乐,则必须故意返回并在第三方音乐应用程序中按播放,或使用iOS 7的向上滑动控制面板。 否则,游戏自己的音乐将接pipe。 这带来了一些缺陷: 它不会检测第三方音乐应用程序何时通过iPhone / iPod耳塞内置的点击式遥控器启动/停止播放。 虽然它适用于iPod应用程序,但不适用于SoundCloud应用程序。 我没有testing任何其他人。 问题是: 当第三方音乐应用程序(例如iPod应用程序)开始/停止播放时,是否有办法接收通知? 或者,有没有办法通知@property BOOL otherAudioPlaying的值更改? 这种方法能适得其反吗? 不简单地使用菜单项是愚蠢的吗?

iOS:在后台应用程序中访问设备麦克风

林不知道,是否有一种方式,让应用程序访问一个iDevice的麦克风,而在后台运行(该设备可能会或可能不会被locking)? 我需要听audioinput并做一些声音识别。 来自墨西哥的欢呼声

AVAssetReader读取audio,然后失败

我的应用程序读取audio并在生产者/消费者设置中播放。 消费者线程请求新的样本呈现给硬件。 生产者线程使用AVAssetReader从磁盘读取audio数据到其缓冲区。 生产者线程循环运行,检查是否需要读取更多的样本。 制作者的缓冲区大小等于4秒的audio。 当我指示我的应用程序缓冲audio,样品读取成功没有错误。 当我触发我的制作者线程开始渲染audio时,4秒缓冲区完美播放,然后静音。 进一步调查显示,我的资产阅读器在播放开始时失败,因此在初始缓冲之后没有读取其他样本: CMSampleBufferRef ref = [readaudiofile copyNextSampleBuffer]; if (ref == NULL && filereader.status == AVAssetReaderStatusFailed) { NSLog(@"reader failed: %@", filereader.error); } // this produces: // {NSLocalizedFailureReason=An unknown error occurred (-12785), // NSUnderlyingError=0x161f60 "The operation couldn't be completed. // (OSStatus error -12785.)", NSLocalizedDescription=The operation // could not be completed} 我的生产者线程代码与function代码示例MusicLibraryRemoteIODemo完全相同 […]

AVPlayer不正确地播放video合成结果

我需要一个简单的东西: 在旋转和应用CIFilter同时播放video。 首先,我创build玩家项目: AVPlayerItem *item = [AVPlayerItem playerItemWithURL:videoURL]; // DEBUG LOGGING AVAssetTrack *track = [[item.asset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0]; NSLog(@"Natural size is: %@", NSStringFromCGSize(track.naturalSize)); NSLog(@"Preffered track transform is: %@", NSStringFromCGAffineTransform(track.preferredTransform)); NSLog(@"Preffered asset transform is: %@", NSStringFromCGAffineTransform(item.asset.preferredTransform)); 然后我需要应用video作品。 最初,我正在考虑用2条指令创build一个AVVideoComposition ,一个是AVVideoCompositionLayerInstruction ,另一个是CIFilter应用程序。 然而,我得到一个exception抛出说: “期望video组成只包含AVCoreImageFilterVideoCompositionInstruction”这意味着苹果不允许结合这两个指令。 所以,我把这两个过滤结合起来,这里是代码: AVAsset *asset = playerItem.asset; CGAffineTransform rotation = [self transformForItem:playerItem]; AVVideoComposition *composition = [AVVideoComposition videoCompositionWithAsset:asset […]

让iOS相机在Swift 2中输出浮点值

我试图在这个网站上实现这个例子来从相机获取浮动图像,但是我得到的输出图像仍然是UInt32像素(每个= 4 x UInt8颜色值)。 我不明白为什么转换到float32像素颜色组件不会发生。 所有我调整了迅速2.0更新。 代码收集在一起: let output = AVCaptureVideoDataOutput() var settings = [kCVPixelBufferPixelFormatTypeKey as NSString:kCVPixelFormatType_32BGRA] output.videoSettings = settings output.alwaysDiscardsLateVideoFrames = true func captureOutput(captureOutput: AVCaptureOutput!, didOutputSampleBuffer sampleBuffer: CMSampleBuffer!, fromConnection connection: AVCaptureConnection!) // Get Video Buffer var imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer) // Lock the base address of the pixel buffer CVPixelBufferLockBaseAddress(imageBuffer, 0) // Width and height […]

AVAssetExportSession没有audio(iPhone),适用于iPad

我们正在尝试使用audio(.mov)制作一个现有的video,并制作更多电子邮件友好的版本。 看起来很简单,下面的代码几乎可以做我们需要的东西。 在iPad2(4.3.3)上,它一直在debugging和发布。 在iPhone 4(4.3.3)或第四代iPod Touch上没有audio。 有时候,触发它的东西没有明显的相关性,它会开始在iPhone上工作。 删除应用程序,重build/安装,它不再工作。 AVURLAsset* asset = [AVURLAsset URLAssetWithURL:[NSURL fileURLWithPath:sourcePath] options:nil]; session = [[AVAssetExportSession alloc] initWithAsset:asset presetName:AVAssetExportPresetLowQuality]; session.outputURL = [NSURL fileURLWithPath:destPath]; session.outputFileType = AVFileTypeQuickTimeMovie; session.shouldOptimizeForNetworkUse = YES; [session exportAsynchronouslyWithCompletionHandler:^{ [self performSelectorOnMainThread:@selector(conversionFinished) withObject:nil waitUntilDone:NO]; }];

同时caching/播放AVPlayervideo

我的代码从这个问题借了很多: AVPlayer停滞在大型video文件使用资源加载器委托和问题提到的代码,在这里: https : //gist.github.com/anonymous/83a93746d1ea52e9d23f 我的问题虽然是,即使我的video下载,我可以逐步跟踪它,它永远不会播放。 我的代码几乎与上面的问题相同,除了在tableview单元格中。 这是很多代码(大约100行),所以我只是简单地创build了一个要点: https : //gist.github.com/JoeyBodnar/7be323b066058667851b 那么,如何在加载时将数据传回AVURLAsset,以便video在加载时播放? 我的代码几乎与上述问题相同(据我所知),这些作者声称video/audio会在下载时播放。 我究竟做错了什么?

为什么Swift的AVPlayer会在一次播放中加载playerItem两次?

我正在使用AVFoundation的AVPlayer来stream式传输外部mp3文件。 我在后端有一个计数器来计算文件加载的次数。 这个服务的唯一客户端只有我,每当我触发播放AVPlayer,计数器增加两个,这意味着AVPlayer请求两次。 有没有这个原因,或者我怎样才能防止这种情况发生? 这是我的代码: @IBAction func listen(sender: UIButton) { let urlstring = "http://api.server.com/endpoint-to-mp3" let url = NSURL(string: urlstring) let playerItem = AVPlayerItem(URL: url!) let player = AVPlayer(playerItem: playerItem) let playerLayer = AVPlayerLayer(player: player) playerLayer.frame = CGRectMake(0, 0, 300, 50) self.view.layer.addSublayer(playerLayer) player.volume = 1.0 player.play() }

AVAssetImageGenerator在复制图像时失败

我正在使用AVAssetImageGenerator从video的最后一帧创build一个图像。 这通常工作正常,但copyCGImageAtTime与错误 NSLocalizedDescription = "Cannot Open"; NSLocalizedFailureReason = "This media cannot be used."; NSUnderlyingError = "Error Domain=NSOSStatusErrorDomain Code=-12431"; 我正在validationAVAsset不是零,我直接从资产拉CMTime,所以我不明白为什么这种情况继续发生。 这只发生在试图获取最后一帧时,如果我使用kCMTimeZero ,它似乎工作。 – (void)getLastFrameFromAsset:(AVAsset *)asset completionHandler:(void (^)(UIImage *image))completion { NSAssert(asset, @"Tried to generate last frame from nil asset"); AVAssetImageGenerator *gen = [[AVAssetImageGenerator alloc] initWithAsset:asset]; gen.requestedTimeToleranceBefore = kCMTimeZero; gen.requestedTimeToleranceAfter = kCMTimeZero; gen.appliesPreferredTrackTransform = YES; CMTime time = […]