【问题标题】:How to convert video data to NSURL如何将视频数据转换为 NSURL
【发布时间】:2018-03-20 16:11:42
【问题描述】:

我有一个从我的服务器获取并作为数据接收的视频。我正在尝试将原始数据覆盖到 URL 中,以便可以使用它来实例化 AVPlayerItem 并在手机上播放视频。但是,当我打印“videoDataString”时,此代码返回 nil。如果我打印“videoData”,则会有结果。这是我尝试转换的代码,我的错误是编码部分吗?

let videoDataString = NSString(data: videoData, encoding: NSUTF8StringEncoding)
let videoURL = NSURL(string: String(videoDataString))

【问题讨论】:

  • URL 是资源的名称,而不是内容。你是如何从你的服务器获取它的?大概你指定它的文件名/U​​RL,所以这就是你应该使用的 NSURL。
  • 将视频数据存储在特定位置的文件管理器中。之后使用存储位置的文件管理器 url 播放视频。

标签: ios swift


【解决方案1】:

首先将您的视频数据保存到一个文件中,然后尝试以文件 URL 的形式访问该文件。 这是一个例子。

 NSString *filePath = [self documentsPathForFileName:@"video.mp4"];
 NSData *videoAsData;   // your data here
 [videoAsData writeToFile:filePath atomically:YES];

 // access video as URL
 NSURL *videoFileURL =  [NSURL fileURLWithPath:filePath];


- (NSString *)documentsPathForFileName:(NSString *)name
{
   NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);
   NSString *documentsPath = [paths objectAtIndex:0];

   return [documentsPath stringByAppendingPathComponent:name];
}

对于 Swift 3.0:

let filePath = self.documentsPathForFileName("video.mp4")
        let videoAsData = NSData()
        videoAsData.write(toFile: filePath, atomically: true)
        let videoFileURL = NSURL(fileURLWithPath: filePath)

func documentsPathForFileName(name: String) -> String {
        let documentsPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0]
        return documentsPath.appending(name)
    }

【讨论】:

  • 应该是 self.documentsPathForFileName("/video.mp4")
【解决方案2】:

您不能将所有字符串都转换为 URL。 URL 是统一资源定位器。这意味着它是一个字符串,其中包含远程或本地目标中文件或资源的路径。如果您想保留视频数据并使用该视频实例化视频播放器,请先将视频数据保存到文件中,然后使用该文件的路径实例化视频播放器。

为此使用以下代码

let documentsURL = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask).first!
let videoURL = documentsURL.URLByAppendingPathComponent("video.mp4")//what ever your filename and extention
videoData.writeToURL(videoURL, atomically: true)

//uese videoURL to instantiate video player

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-10
    • 2016-08-15
    • 2014-04-04
    • 2017-06-29
    • 2011-12-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多