【问题标题】:Can we create movie player using nsdata in ios?我们可以在 ios 中使用 nsdata 创建电影播放器​​吗?
【发布时间】:2012-11-14 11:30:57
【问题描述】:

我知道我们可以使用initWithContentURL: 创建电影播放器​​,并且可以传递 NSUrl 参数。这里我没有 NSUrl,我只有 NSData。通过使用它可以创建电影播放器​​吗?

【问题讨论】:

  • 你想用 NSData 创建一个“电影播放器​​”吗?您的问题是关于创建播放器、电影、查找数据吗?
  • @Abizern 他在问如何从 NSData 对象创建一个 NSURL (本地文件)。为什么他有NSData 对象不是我们关心的。

标签: ios video nsdata mpmovieplayer


【解决方案1】:

没有可用于使用数据初始化 Movieplayer 的方法。

我的建议:您需要将数据作为视频文件写入文档目录,然后使用该 url 初始化播放器。

目标 C

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *appFile = [documentsDirectory stringByAppendingPathComponent:@"MyFile.m4v"];
[data writeToFile:appFile atomically:YES];

这里的data是视频文件的NSData

您现在可以使用appFile 变量来初始化您的电影播放器​​。

NSURL *movieUrl = [NSURL fileURLWithPath:appFile];
MPMoviePlayerController *moviePlayer = [[MPMoviePlayerController] alloc] initWithContentURL:movieUrl];

斯威夫特

保存文件:

let paths = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)
if let docDir = paths.first
{
    let appFile  = docDir.appending("/MyFile.m4v")
    let movieUrl = URL(fileURLWithPath: appFile)

    do
    {
        try data.write(to: movieUrl, options: .atomic)
    }
    catch let error as NSError
    {
        print(error.localizedDescription)
    }
}

初始化电影播放器​​:

let moviePlayer = MPMoviePlayerController(contentURL: movieUrl)

注意: MPMoviePlayerControlleriOS 9 中已弃用,因此您可能需要使用 AVPlayerViewController

【讨论】:

  • Prasad G:还有问题吗?
  • @RyanRomanchuk:查看上面 OP 的评论,它对他有用。那么你怎么能说这不是答案,OP已经接受了它。如果您有任何其他答案,请发布。
  • @MidhunMP 抱歉没看到[data writeToFile:appFile atomically:YES]; SO 上的每个人都用“不要那样做”回答了这个问题 误读了你的答案,会投赞成票 :)
  • @MidhunMP,这是正确的答案,但它不能是通用的(特别是加密文件)
  • 这段代码的 swift 版本会是什么样子?
猜你喜欢
  • 2012-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多