【问题标题】:NSString from NSData returns nil来自 NSData 的 NSString 返回 nil
【发布时间】:2015-06-24 16:33:38
【问题描述】:

所以我正在使用 Parse(非常棒)并且我正在从解析服务器下载文件(短视频文件 - 不超过 1mb)到我的应用程序来播放。现在它的工作方式是(通过文档)..

PFFile* videoFile = [[tempArray objectAtIndex:i] objectForKey:@"track"];


[videoFile getDataInBackgroundWithBlock:^(NSData *data, NSError *error) {
       if (!error) {
           NSString* dataString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
           NSURL* videoURL = [NSURL URLWithString:dataString];
           // now do something with this videoURL (i.e. play it!)
           [data writeToFile:@"trackFile" atomically:YES];
                NSURL *filePath = [NSURL fileURLWithPath:@"trackFile"];
                NSLog(@"File Path: %@",filePath);

                AVAsset* asset = [AVAsset assetWithURL:filePath];
                AVPlayerItem* playerItem = [[AVPlayerItem alloc] initWithAsset:asset];

       }
}

下载完成后,您应该从数据中创建一个字符串,然后从该字符串中创建一个 url。唯一的问题是 - dataString 总是返回 NULL/nil。我已经确认 data 属性不为空,并且确实保存了视频数据。为什么会这样?任何帮助将不胜感激。提前致谢!

【问题讨论】:

    标签: ios objective-c parse-platform nsstring nsdata


    【解决方案1】:

    我已确认 data 属性不为空,并且确实保存了视频数据。

    视频数据不是 UTF-8 字符串。它绝对不是 URL 的 UTF-8 字符串表示。因此,当您说“将此视频数据解释为 UTF-8”时,Cocoa 正确地回答它不是 UTF-8(因为它是视频数据)。

    最简单的解决方案是将其写入磁盘,然后播放文件。

    【讨论】:

    • 感谢您的洞察力。通过写入磁盘,这将永久保存设备上的视频文件吗?我想要完成的是与 Instagram 的视频播放非常相似的事情。这样做的最佳方法是什么?
    • 我不知道有任何简单的方法可以将原始数据交给AVPlayer。它确实需要本地或远程 URL 中的数据。您负责清理您创建的文件。完成后删除它们,并在启动时删除所有临时文件。
    • 搜索“avplayer nsdata”。多年来,这已被多次讨论。
    【解决方案2】:

    几个需要先确定的事情:

    1. NSData 对象是否真的有任何数据,即 data.length > 0?
    2. NSData 对象是否保存视频数据视频数据的 url(不完全清楚)?

    假设 NSData 对象持有 url 并且它的长度大于 0,那么您可能想尝试:

    NSString* dataString = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];
    

    【讨论】:

    • NSData 对象确实有数据。如何判断 NSData 对象是否包含视频数据,或者更确切地说是视频数据的 url。 (我很确定它保存了视频数据)..尽管如此,我尝试使用 NSASCIIStringEncoding 并且它仍然返回 nil
    • NSData 的长度是多少?如果它只有几百个字符,那么可能是一个 url。如果它是 MB 大,那么可能是视频数据。
    • 视频数据!!因此,将其保存到磁盘并播放文件...然后标记文件(和任何其他文件)以便稍后删除(这样您就不会填满磁盘)。
    • 好的。你认为这就是 Instagram 对你在帖子中看到的视频的处理方式吗?
    • 老实说,我不知道 Instagram 是如何做到的……从未使用过 instagram。您保留视频文件的时间实际上取决于您,并且是一个可用性决定(即,您的用户是否会回来并重新观看此视频,如果是,可能会保留一段时间)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-13
    • 2015-12-10
    • 2016-10-19
    • 1970-01-01
    相关资源
    最近更新 更多