【问题标题】:Playing video from NSData in objective c在目标 c 中播放来自 NSData 的视频
【发布时间】:2017-05-21 06:50:01
【问题描述】:
我有视频的 NSData 并存储在我的缓存中。我想在 AVPlayer(或其他播放器,如果 iOS 有)上播放它,但无法理解我应该以哪种格式转换 NSData 以便它可以在 AVplayer 上播放。我不想将其保存在本地,然后将文件路径提供给 AVplayer 以播放视频。
请建议是否有任何其他方式可以播放来自 NSData 的视频。我已经花了 3 天时间,但无法得出任何结论。请提出您的建议。任何帮助或建议将不胜感激。提前致谢!
【问题讨论】:
标签:
objective-c
caching
avplayer
【解决方案1】:
我给你的解决方案是从缓存中获取 NSData 并播放视频。
第 1 步:在 Target->BuilPhases->Link Binary With Libraries 中添加 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
STEP 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;
}