【发布时间】:2011-09-22 14:02:17
【问题描述】:
我有一个应用程序,我希望它在后台显示来自摄像机的视频源。我的视图控制器中有以下代码:
#if !TARGET_IPHONE_SIMULATOR
imagePickerController = [[UIImagePickerController alloc] initWithRootViewController:self];
imagePickerController.delegate = self;
imagePickerController.sourceType = UIImagePickerControllerSourceTypeCamera;
imagePickerController.navigationBarHidden = YES;
imagePickerController.toolbarHidden = NO;
imagePickerController.showsCameraControls = NO;
//...
[self.view addSubview:self.imagePickerController.view];
[imagePickerController viewWillAppear:YES];
[imagePickerController viewDidAppear:YES];
#endif
//...
[self.view addSubview:otherthings];
然后我在顶部添加其他视图,我也有声音。但是,我将图像选择器模式更改为视频,但在播放声音时它会冻结。这是我改变的:
#if !TARGET_IPHONE_SIMULATOR
imagePickerController = [[UIImagePickerController alloc] init];//initWithRootViewController:self];
imagePickerController.delegate = self;
imagePickerController.sourceType = UIImagePickerControllerSourceTypeCamera;
NSArray *mediaTypes = [UIImagePickerController availableMediaTypesForSourceType:UIImagePickerControllerSourceTypeCamera];
NSArray *videoMediaTypesOnly = [mediaTypes filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"(SELF contains %@)", @"movie"]];
BOOL movieOutputPossible = (videoMediaTypesOnly != nil);
if (movieOutputPossible) {
imagePickerController.mediaTypes = videoMediaTypesOnly;
imagePickerController.videoQuality = UIImagePickerControllerQualityTypeHigh;
imagePickerController.navigationBarHidden = YES;
imagePickerController.toolbarHidden = YES;
imagePickerController.showsCameraControls = NO;
}
#endif
谁知道为什么当声音播放时相机选择器会冻结?顺便说一下,声音是一个 AVAudioPlayer。
【问题讨论】:
-
为什么在alloc的时候把rootViewController的定义去掉了?
-
不知道,试过之后它只会在我播放声音时冻结。为什么?
-
很可能你有一些东西在做自动释放,你应该分配你自己的东西来保存。具体来说,我将从这两行开始:(NSArray *mediaTypes =) 和 (NSArray *videoMediaTypesOnly =)。这些都是在您无法控制的情况下自动释放的,可能会导致问题。
-
即使我删除它并添加 imagePickerController.mediaTypes = [[NSArray alloc] initWithObjects: (NSString *) kUTTypeMovie, nil];播放声音时它仍然冻结。当声音结束时,相机并没有解冻。
-
不确定我明白了...您是说在播放 AVAudioPlayer 声音时电影播放冻结,然后在声音播放完毕后恢复播放?
标签: objective-c video uiimagepickercontroller