Objective-C直接上传到YouTube

发布于 2024-10-06 12:37:42 字数 2874 浏览 0 评论 0原文

我在使用我的应用程序上传视频时遇到问题。我在 YouTube 上的“我的视频”中看到该视频,但随后显示:“无法转换视频文件”。我通过本机 YouTube 上传器成功上传了该视频。请告诉我我的代码有什么问题,以及该错误的含义。

代码在这里:

-(NSString*) GetHeader{
       NSString* xml = [[NSString alloc] init];
       xml = [xml stringByAppendingString:[NSString stringWithFormat:@"%@
%@Content-Type: application/atom+xml; charset=UTF-8%@%@",kboundary,
klineTerm, klineTerm, klineTerm]];

       xml = [xml stringByAppendingString:@"<?xml version=\"1.0\"?>"];
       xml = [xml stringByAppendingString:@"<entry xmlns=\"http://www.w3.org/
2005/Atom\" xmlns:media=\"http://search.yahoo.com/mrss/\" xmlns:yt=
\"http://gdata.youtube.com/schemas/2007\"> <media:group><media:title
type=\"plain\">Movie.m4v</media:title><media:description type=\"plain
\">I gave a bad toast at my friends wedding.</
media:description><media:category scheme=\"http://gdata.youtube.com/
schemas/2007/categories.cat\">People</
media:category><media:keywords>toast, wedding</media:keywords></
media:group></entry>\r\n"];

       xml=[xml stringByAppendingString:[NSString stringWithFormat:@"%@
%@Content-Type: video/m4v%@Content-Transfer-Encoding: binary%@
%@",kboundary,klineTerm,klineTerm,klineTerm,klineTerm]];
       return xml;
}

-(IBAction)uploadVideoByAuthKey:(id)respons{
       NSMutableData* requestBody;
       const char *utfMyString = [[self GetHeader] UTF8String];
       const char *utfMyString1=[[NSString stringWithFormat:@"%@
%@--",klineTerm,kboundary] UTF8String];
       requestBody=[NSMutableData dataWithBytes:utfMyString
length:strlen(utfMyString)+1];

       //Add video file in body
       NSURL* URL = [[NSBundle mainBundle] URLForResource:@"Movie"
withExtension:@"m4v"];

       NSData*file=[NSData dataWithContentsOfURL:URL];
       [requestBody appendData:file];
       [requestBody appendData:[NSData dataWithBytes:utfMyString1
length:strlen(utfMyString1)+1]];

       //Create request
       NSMutableURLRequest* request = [[NSMutableURLRequest alloc]
initWithURL:[NSURL URLWithString:kVideoRequestURL]];
       [request setHTTPMethod:@"POST"];
       [request addValue:[NSString stringWithFormat:@"multipart/related;
boundary=%@;",kboundaryheader] forHTTPHeaderField:@"Content-Type"];
       [request addValue:[NSString stringWithFormat:@"%i",[requestBody
length]] forHTTPHeaderField:@"Content-Length"];
       [request addValue:[NSString stringWithFormat:@"GoogleLogin auth=
%@",authKey] forHTTPHeaderField:@"Authorization"];
       [request addValue:[NSString stringWithFormat:@"key=%@",kdevKey]
forHTTPHeaderField:@"X-GData-Key"];
       [request addValue:[NSString stringWithFormat:@"%@",@"Movie.m4v"]
forHTTPHeaderField:@"Slug"];
       [request addValue:@"add_video_to_youtube" forHTTPHeaderField:@"X-
GData-Client" ];
       [request setHTTPBody: requestBody];
}

I am having a problem uploading video with my app. I see the video in My Videos on YouTube, but then it says: "unable to convert video file". I uploaded this video through the native YouTube uploader successfully. Please tell me that wrong with my code, and what the error means.

Code here:

-(NSString*) GetHeader{
       NSString* xml = [[NSString alloc] init];
       xml = [xml stringByAppendingString:[NSString stringWithFormat:@"%@
%@Content-Type: application/atom+xml; charset=UTF-8%@%@",kboundary,
klineTerm, klineTerm, klineTerm]];

       xml = [xml stringByAppendingString:@"<?xml version=\"1.0\"?>"];
       xml = [xml stringByAppendingString:@"<entry xmlns=\"http://www.w3.org/
2005/Atom\" xmlns:media=\"http://search.yahoo.com/mrss/\" xmlns:yt=
\"http://gdata.youtube.com/schemas/2007\"> <media:group><media:title
type=\"plain\">Movie.m4v</media:title><media:description type=\"plain
\">I gave a bad toast at my friends wedding.</
media:description><media:category scheme=\"http://gdata.youtube.com/
schemas/2007/categories.cat\">People</
media:category><media:keywords>toast, wedding</media:keywords></
media:group></entry>\r\n"];

       xml=[xml stringByAppendingString:[NSString stringWithFormat:@"%@
%@Content-Type: video/m4v%@Content-Transfer-Encoding: binary%@
%@",kboundary,klineTerm,klineTerm,klineTerm,klineTerm]];
       return xml;
}

-(IBAction)uploadVideoByAuthKey:(id)respons{
       NSMutableData* requestBody;
       const char *utfMyString = [[self GetHeader] UTF8String];
       const char *utfMyString1=[[NSString stringWithFormat:@"%@
%@--",klineTerm,kboundary] UTF8String];
       requestBody=[NSMutableData dataWithBytes:utfMyString
length:strlen(utfMyString)+1];

       //Add video file in body
       NSURL* URL = [[NSBundle mainBundle] URLForResource:@"Movie"
withExtension:@"m4v"];

       NSData*file=[NSData dataWithContentsOfURL:URL];
       [requestBody appendData:file];
       [requestBody appendData:[NSData dataWithBytes:utfMyString1
length:strlen(utfMyString1)+1]];

       //Create request
       NSMutableURLRequest* request = [[NSMutableURLRequest alloc]
initWithURL:[NSURL URLWithString:kVideoRequestURL]];
       [request setHTTPMethod:@"POST"];
       [request addValue:[NSString stringWithFormat:@"multipart/related;
boundary=%@;",kboundaryheader] forHTTPHeaderField:@"Content-Type"];
       [request addValue:[NSString stringWithFormat:@"%i",[requestBody
length]] forHTTPHeaderField:@"Content-Length"];
       [request addValue:[NSString stringWithFormat:@"GoogleLogin auth=
%@",authKey] forHTTPHeaderField:@"Authorization"];
       [request addValue:[NSString stringWithFormat:@"key=%@",kdevKey]
forHTTPHeaderField:@"X-GData-Key"];
       [request addValue:[NSString stringWithFormat:@"%@",@"Movie.m4v"]
forHTTPHeaderField:@"Slug"];
       [request addValue:@"add_video_to_youtube" forHTTPHeaderField:@"X-
GData-Client" ];
       [request setHTTPBody: requestBody];
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

孤独患者 2024-10-13 12:37:42

尝试将 Content-Type: video/m4v 更改为 Content-Type: video/x-m4v

Try to change Content-Type: video/m4v to Content-Type: video/x-m4v

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文