2013-02-19 58 views
0

我想将大文件视频文件上传到Facebook,但无论采取何种方法,结果都始终如一。该过程上传5-35mb的数据然后超时。这发生在WiFi上。无法将大视频从iOS应用程序上传到Facebook

我已经尝试过Facebook SDK 3.1.1,iOS Social Library(即SLRequest)和AFNetworking。

社交库和联网会给超时错误,而Facebook SDK仅返回代码5,操作无法完成,HTML错误200,但如果通过工具观看网络活动,它具有相同的签名,即存在在停止之前上传一定数量的兆字节。

请注意,我可以使用以上三种方法中的任何一种方法上传较小的视频而不出现任何问题。

有没有人遇到这个问题,并找到任何解决方案或原因呢?

p.s.我相信它是一个Facebook的bug,如果有其他人想订阅它,鼓励他们去调查它(https://developers.facebook.com/bugs/265409976924087),我已经在那里记录了一个问题。

的Facebook SDK代码

NSData *videoData = [NSData dataWithContentsOfFile:videoUrlStr options:NSDataReadingMappedAlways error:&lError]; 
NSString *description = self.streamToShare.videoDescription; 

    if (description == nil){ 
     description = @""; 
    } 
NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObjectsAndKeys:videoData, self.streamToShare.publishedStoryFileName, 
             @"video/quicktime", @"contentType", 
             self.streamToShare.name, @"title", 
             description,@"description", 
             nil]; 
[FBRequestConnection startWithGraphPath:@"me/videos" parameters:params HTTPMethod:@"POST" completionHandler:^(FBRequestConnection *connection, id result, NSError *error) { 
      if (error) { 
       self.errorMessage = [NSString stringWithFormat:@"error: domain = %@, code = %d, description = %@", error.domain, error.code, error.localizedDescription]; 
      } 
} 

iOS原生库和AFNetworking代码

[accountStore requestAccessToAccountsWithType:facebookTypeAccount 
               options:@{ACFacebookAppIdKey: appID,ACFacebookPermissionsKey: @[@"publish_stream"],ACFacebookAudienceKey:ACFacebookAudienceFriends} completion:^(BOOL granted, NSError *error) { 
    if(granted){ 
    NSArray *accounts = [accountStore accountsWithAccountType:facebookTypeAccount]; 
    facebookAccount = [accounts lastObject]; 
    NSLog(@"Facebook Login Success"); 
    NSURL *videourl = [NSURL URLWithString:@"https://graph.facebook.com/me/videos"]; 
    NSURL *pathURL = [[NSURL alloc]initFileURLWithPath:self.streamToShare.publishedStoryURL isDirectory:NO]; 
    NSDictionary *params = @{ 
     @"title": self.streamToShare.name, 
     @"description": description 
    }; 
    SLRequest *uploadRequest = [SLRequest requestForServiceType:SLServiceTypeFacebook requestMethod:SLRequestMethodPOST URL:videourl parameters:params]; 
    [uploadRequest addMultipartData:videoData withName:@"source" type:@"video/quicktime" filename:[pathURL absoluteString]]; 
    uploadRequest.account = facebookAccount; 
    NSURLRequest *urlRequest = [uploadRequest preparedURLRequest]; 
    NSMutableURLRequest *mutableUrlRequest = [urlRequest mutableCopy]; 
    [mutableUrlRequest setCachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData]; 
    [mutableUrlRequest setTimeoutInterval:60]; // adjusting this does not fix the issue 

    // AF Networking Code             
    NSInputStream *stream = [[NSInputStream alloc] initWithData:videoData]; 
    [mutableUrlRequest setHTTPBodyStream:stream]; 
    AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc]initWithRequest:mutableUrlRequest]; 
    [operation setUploadProgressBlock:^(NSUInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite) { 
     NSLog(@"%lld bytes out of %lld sent", totalBytesWritten, totalBytesExpectedToWrite, progress); 
    }]; 
    [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) { 
     NSLog(@"Facebook upload success"); 
     } failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
     NSLog(@"Facebook upload error %@",error.localizedDescription); 
     } 
    }]; 
    [operation start]; 

    // iOS Native Library Upload - Commented out so AFNetworking could be tested            
    //NSURLResponse *urlResponse = nil; 
    //NSError *urlRequestError = nil; 
    /*[NSURLConnection sendSynchronousRequest:mutableUrlRequest returningResponse:&urlResponse error:&urlRequestError]; 
    if (urlResponse == nil) { 
     // Check for problems 
     if (urlRequestError != nil) { 
     NSLog(@"Error %@", urlRequestError.localizedDescription); 
     } 
    } 
    else { 
     // Data was received.. continue processing 
     NSLog(@"Worked!"); 
    }*/ 


    }else{ 
    // ouch 
    NSLog(@"Permission not granted. Error: %@", error); 
    } 
}]; 

回答

0

这在最新的SDK已经解决了。它现在没有问题。

0

graph.facebook.com似乎只接受小视频。尝试张贴到graph-video.facebook.com/me/videos代替

NSURL *videourl = [NSURL URLWithString:@"https://graph-video.facebook.com/me/videos"]; 
+0

很高兴SDK 3.13.1检测到'me/videos'调用并将网址替换为'graph-video.facebook.com' – SoftDesigner 2014-06-11 15:18:13

相关问题