iOS如何将本地文件URL插入NSURLConnection响应数据?

时间:2014-08-05 16:37:36

标签: ios objective-c nsurlconnection

我正在尝试修改iOS应用中网页的行为,并使页内媒体播放器从本地缓存文件夹播放文件,而不是从网络服务器获取文件。

下面是我的代码,它用本地文件路径替换http://视频路径。代码不起作用,给我“资源暂时不可用。请再试一次”错误消息弹出。 是否可以使用文件网址从本地磁盘播放基于Web的媒体播放器? 我尝试将这些替换为instanceURL,但它们似乎不起作用。

[fileURL path]
[fileURL absolutePath]

我正在拦截该文件的请求并正在解析它以找出该页面要求的视频文件:

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
    // An NSURLConnection delegate callback.  We pass this on to the client.
{


    NSDictionary* decisionDictionary = [[RequestListener sharedInstance] shouldContinue:connection processRequestData:data];

    BOOL shouldContinue = [decisionDictionary[@"shouldContinue"] boolValue];

    if(shouldContinue == NO)
    {
        return;
    }else
    {
        NSData* d = data;
        //substitute fake data
        if(decisionDictionary[@"data"])
        {
            d = decisionDictionary[@"data"];
        }

        [[self client] URLProtocol:self didLoadData:d];

    }


}

在我的shouldContinue方法中,我检查视频是否存在于本地并修改响应数据以创建本地视频的路径。

    NSString* path = [VideoDownloader localVideoPathForVideoID:videoID];
     NSURL* fileURL = [NSURL fileURLWithPath:path];

DLog(@"url:%@",[fileURL absoluteString]);
     NSString* replacement = [NSString stringWithFormat:@"\"instanceUrl\":\"%@\"",[[fileURL absoluteURL] absoluteString]];
      DLog(@"replacement:%@",replacement);
      NSString* forgedResponse = [parts componentsJoinedByString:@","];
      NSData* forgedData = [forgedResponse dataUsingEncoding:NSUTF8StringEncoding];
      return @{@"shouldContinue":@(YES),@"data":forgedData};

1 个答案:

答案 0 :(得分:0)

看看NSURLProtocol。您可以在将http请求发送到主机之前拦截它们,以决定如何处理它:继续服务器,重定向到本地缓存。

有一个不错的tutorial by our beloved Ray Wenderlich

Apple有programming guide as well