在目标c

时间:2017-05-21 06:50:02

标签: objective-c caching avplayer

我有视频的NSdata存储在我的缓存中。我想在AVPlayer(或其他一些播放器,如果ios)上播放这个但是无法理解以哪种格式转换NSData以便它可以在AVplayer上播放。我不想在本地保存,然后将文件路径提供给avplayer播放视频。 请建议有没有其他方式来播放NSData的视频。我已经花了3天时间,但是coudn没有得出任何结论。请给出你的建议。任何帮助或建议将不胜感激。谢谢提前!< / p>

1 个答案:

答案 0 :(得分:1)

我为您提供了从缓存中获取NSData并播放视频的解决方案。

步骤1:在Target-&gt; BuilPhases-&gt;链接二进制文件库中添加AVKit框架

第2步:然后在ViewController中导入。现在看起来如下所示。

ViewController.h

#import <AVKit/AVKit.h>

步骤3:在ViewController.h中将AVPlayerViewController声明为Strong

#import <UIKit/UIKit.h>
#import <AVKit/AVKit.h>

@interface ViewController : UIViewController
@property (strong, nonatomic) AVPlayerViewController *playerViewController;
- (IBAction)actionPlayVideo:(id)sender;

@end

第4步:从缓存中获取路径并转换为URL。然后终于播放视频

ViewController.m

#import "ViewController.h"

@interface ViewController (){
    NSURL *vedioURL;
}

@end

@implementation ViewController
@synthesize playerViewController;

- (IBAction)actionPlayVideo:(id)sender{
    NSString *strNSDataPath = [[self getNSDataFromCache] stringByAppendingPathComponent:@"YourSavedNSDataName"];
    vedioURL =[NSURL fileURLWithPath:strNSDataPath];
    AVPlayerItem* playerItem = [AVPlayerItem playerItemWithURL:vedioURL];
    AVPlayer* playVideo = [[AVPlayer alloc] initWithPlayerItem:playerItem];
    playerViewController = [[AVPlayerViewController alloc] init];
    playerViewController.player = playVideo;
    playerViewController.player.volume = 0;
    playerViewController.view.frame = self.view.bounds;
    [self.view addSubview:playerViewController.view];
    [playVideo play];
}
-(NSString *)getNSDataFromCache{
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
    NSString *cachesDirectory = [paths objectAtIndex:0];
    return cachesDirectory;
}