• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - 从存储在核心数据中的 NSData 播放视频

[复制链接]
菜鸟教程小白 发表于 2022-12-12 16:29:17 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我正在尝试播放存储在核心数据中的视频。获取后显示,有一个对象,objects.video 返回一个值,但 dataString 打印为空。我不确定我可能做错了什么。这是播放视频的正确方式还是我可以做得更好?

我在 Core Data 中有一个对象。

我已将视频作为 NSData 存储在核心数据中。我想获取存储的视频并播放。有没有其他方法可以做到?

_context =  [(AppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName"Activity" inManagedObjectContext:_context];
[fetchRequest setEntity:entity];
// Specify how the fetched objects should be sorted
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey"level"
                                                               ascending:YES];
[fetchRequest setSortDescriptors:[NSArray arrayWithObjects:sortDescriptor, nil]];


NSError *error = nil;
NSArray *fetchResults = [_context executeFetchRequest : fetchRequest error : &error];
if(fetchRequest == nil){
    NSLog(@"Nothing fetched");
}


for (Activity *objects in fetchResults){

    NSLog(@"%@",objects.video);
  prints->  External Data Reference: <self = 0x7bf48750 ; path = FF54B18E-10B3-4B04-81D4-55AC5E2141B9 ; length = 504426>


NSString *dataString = [[NSString alloc] initWithDatabjects.video encoding:NSUTF8StringEncoding];
    NSLog(@"%@",dataString);
    NSURL *movieURL = [NSURL URLWithString:dataString];
    NSLog(@"%@",movieURL);
    _moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:movieURL];
    [_moviePlayer.view setFrame:CGRectMake (20, 20, 200 , self.view.bounds.size.height/2)];
    [self.view addSubview:_moviePlayer.view];
    [_moviePlayer play];

}
NSLog(@"%i",fetchResults.count);



Best Answer-推荐答案


它只是托管对象的二进制属性。您调用该属性,它会返回 NSData。从那里你可以用 NSData 做任何你想做的事情,而它是内存。您的问题是您无法将 NSData 转换为 NSURLNSURL 是对数据的引用,其中 NSData 是实际数据。

您需要做的是将视频文件存储在 SQLite 文件之外的磁盘上。然后在 Core Data 中存储对它的引用(又名 url)。这将允许您将视频文件与电影播放器​​一起使用。

正如其他人所说,将视频存储在 SQLite 文件中是一个坏主意。它会破坏 Core Data 的性能。

更新 1

Thanks. I have not saved the video directly to core data instead just copied the video url and saved it as string in core data. Should I create a different folder for the app to store the videos whenever I create a copy of the videos the users use so even if they delete the original video that was uploaded to core data, the copy remains intact and thus maintaining integrity of the Objects in Core Data.

您的评论不清楚。根据您的问题,您将实际视频存储在核心数据中。根据您显示的输出,您将文件存储在 Core Data 中。你改变了吗?如果是这样,您应该将视频文件存储在已知位置,并将该位置的 relative URL 作为字符串存储在核心数据中。然后,当您准备好使用它时,您可以从中构建完整的 URL。由于沙盒可以更改,因此您无法存储整个 URL,因为它会过时。

关于ios - 从存储在核心数据中的 NSData 播放视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32976541/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap