2016-02-14 76 views
1

我已經掌握了大部分的這種工作,但我堅持的東西可能很簡單。我試圖從SpriteKit中的相機膠捲播放視頻。視頻將從主包中播放,並且視頻選擇器也可以工作,直到我選擇視頻。我想我鎖定了主線程,因爲選擇視頻時選擇器會凍結。非常感謝您的幫助。從SpriteKit相機膠捲播放視頻SKVideoNode

.H

#import <SpriteKit/SpriteKit.h> 
#import "GameViewController.h" 
#import <MobileCoreServices/UTCoreTypes.h> 
@interface GameScene :  SKScene<UINavigationControllerDelegate,UIImagePickerControllerDelegate> 
@end 

.M

#import "GameScene.h" 
#import <AVFoundation/AVFoundation.h> 
@implementation GameScene { 
AVPlayer *player; 
SKVideoNode *videoNode1; 
NSURL *fileURL; 
NSString *moviePath; 
UIViewController *viewController; 
} 

-(void)didMoveToView:(SKView *)view { 
player = [AVPlayer playerWithURL: fileURL]; 

videoNode1 = [[SKVideoNode alloc] initWithAVPlayer:player]; 
videoNode1.size = CGSizeMake(self.frame.size.width,self.frame.size.height); 
videoNode1.position = CGPointMake(self.frame.size.width/2.0f,self.frame.size.height/2.0f); 
videoNode1.zPosition = 100.0f; 
[self addChild:videoNode1]; 

player.volume = 1.0f; 
[videoNode1 play]; 
} 

- (void)getVideo { 
UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init]; 
imagePicker.delegate = self; 
imagePicker.sourceType =  UIImagePickerControllerSourceTypePhotoLibrary; 
imagePicker.mediaTypes = [[NSArray alloc] initWithObjects:(NSString *)kUTTypeMovie,  nil]; 

viewController = self.view.window.rootViewController; 
[viewController presentViewController: imagePicker animated: YES completion:nil]; 
} 

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { 

NSString *mediaType = [info objectForKey: UIImagePickerControllerMediaType]; 

if (CFStringCompare ((__bridge CFStringRef) mediaType, kUTTypeMovie, 0) == kCFCompareEqualTo) { 

    fileURL = (NSURL*)[info objectForKey:UIImagePickerControllerMediaURL]; 
    moviePath = [fileURL path]; 

if (UIVideoAtPathIsCompatibleWithSavedPhotosAlbum (moviePath)) { 
    UISaveVideoAtPathToSavedPhotosAlbum (moviePath, nil, nil, nil); 
} 
    player = [AVPlayer playerWithURL: fileURL]; 
} 
viewController = self.view.window.rootViewController; 
[viewController dismissViewControllerAnimated:YES completion:nil]; 
NSLog(@"place video"); 
} 

回答

0

回答我的問題別人誰想要這個功能。您必須在imagePicker方法中設置節點和播放器。

- (void)getVideo { 
UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init]; 
imagePicker.delegate = self; 
imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; 
imagePicker.mediaTypes = [[NSArray alloc] initWithObjects:(NSString *)kUTTypeMovie, nil]; 
viewController = self.view.window.rootViewController; 
[viewController presentViewController: imagePicker animated: YES completion:nil]; 

} 
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { 

fileURL = [info objectForKey:UIImagePickerControllerMediaURL]; 
[picker dismissViewControllerAnimated:YES completion:NULL]; 
player = [AVPlayer playerWithURL: fileURL]; 

videoNode1 = [[SKVideoNode alloc] initWithAVPlayer:player]; 
videoNode1.size = CGSizeMake(self.frame.size.width, self.frame.size.height); 
videoNode1.position = CGPointMake(self.frame.size.width/2.0f, self.frame.size.height/2); 
videoNode1.zPosition = 100.0f; 
[self addChild:videoNode1]; 

player.volume = 1.0f; 
[videoNode1 play]; 

} 
相關問題