【问题标题】:ios problems with downloading an mp4 fileios下载mp4文件的问题
【发布时间】:2012-05-09 15:47:23
【问题描述】:

我已经建立了一个连接以将this mp4 clip 下载到我的设备,并且我正在使用以下委托函数以“流式”类型的方式存储数据。

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data 
{
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *filePath = [documentsDirectory stringByAppendingPathComponent:@"BuckBunny.mp4"];

    [data writeToFile:filePath atomically:YES];
}

但是,当 5.3MB 的文件下载完成后,我检查了保存文件的大小,它只有 1KB,因此无法播放。我只是保存一小部分而不是我想要的全部吗?我需要做些什么不同的事情?

【问题讨论】:

  • 你用什么来播放这个 mp4?有没有可能AVPlayer
  • @FilipChwastowski 据我所知,我正在使用基于 AVPlayer 的MPMoviePlayerController

标签: ios nsurlconnection nsdata mp4 writetofile


【解决方案1】:

您需要在收到数据时连接数据。查看 NSMutableData 对象。数据完成后,将逻辑放入 connectionDidFinishLoading 委托方法中。

使用此示例,其中 receivedData 是您在开始下载之前初始化的属性。

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
    [receivedData appendData:data];
}

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *filePath = [documentsDirectory stringByAppendingPathComponent:@"BuckBunny.mp4"];

    [receivedData writeToFile:filePath atomically:YES];
    [connection release];
}

【讨论】:

    【解决方案2】:

    上面的答案将在下载时将您的整个视频保存在内存中。虽然这对于小视频可能很好,但不能用于较大的视频。您可以像这样将数据附加到本地驱动器上的文件中:

    - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
        NSFileHandle *handle = [NSFileHandle fileHandleForWritingAtPath:self.path];
        [handle seekToEndOfFile];
        [handle writeData:data];
    }
    

    【讨论】:

      猜你喜欢
      • 2012-12-31
      • 2020-04-24
      • 2012-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-10
      • 2019-03-16
      • 2020-11-24
      相关资源
      最近更新 更多