天道酬勤,学无止境

ASIFormDataRequest 上传视频在 iPhone 模拟器中有效,但对于超过 1.5 MB 的文件在 iPhone 上失败(ASIFormDataRequest upload video works in iPhone simulator but fails with iPhone for files over 1.5 MB)

问题

我正在使用 ASIHTTPFormDataRequest 上传视频文件。 我知道我的代码有效,因为当我在 iPhone 上上传低于 1.5 MB(低于 1 分 40 秒的低质量)的视频时,它成功发布。 我确信这是服务器问题,因此我们进行了所有测试,但都没有成功。 直到前几天,我才能够在 iPhone 模拟器中成功上传一个大文件。 该文件超过 5 MB 且质量很高。 所以我不得不相信它与 iPhone 设备本身有关。 我用谷歌搜索了一场风暴,并得到了同样愚蠢的回应:这是一个服务器问题。 那么它不是...

这是我的代码:

-(void) post:(NSData *) pVideoData progressBarView:(UIProgressView *) pProgressBarView{ 

    pVideoData = [NSData dataWithContentsOfFile: m_pAppDelegate.m_pAppData.m_pPhotoURL]; 
  NSString *urlAddress = [NSString stringWithString:@"https://api.sitename.com/action/upload"];
NSURL *url = [NSURL URLWithString:urlAddress];
    ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];


[request setPostValue:API_KEY forKey:@"api_key"];
[request setPostValue: m_pAppDelegate.m_pAppData.m_sTokenKey forKey:@"user_token"];


[request setPostValue: @"somename" forKey:@"tag"];
[request setPostValue: [AppData getIPAddress] forKey:@"ip"];



[request setData:pVideoData forKey:@"file"];


request.numberOfTimesToRetryOnTimeout = 3;
[request setDelegate:self];
  [request showAccurateProgress];

[request setShouldStreamPostDataFromDisk:YES];
[request setDidFinishSelector:@selector(postRequestSuccess:)];
[request setDidFailSelector:@selector(postRequestFailed:)];
[request startAsynchronous];
    [request setUploadProgressDelegate: pProgressBarView];}

一切正常。 请注意,我已经尝试了以下方法:同步下载和 setfile。 但我不相信问题出在我的代码或我的服务器上。

这是我上传时得到的数据:请注意两者之间的差异。

成功的视频上传:

2012-03-13 14:31:06.413 MYAPP[7805:707] [STATUS] Starting asynchronous request <ASIFormDataRequest: 0xb9bc00>
2012-03-13 14:31:06.543 MYAPP[7805:8c07] 
==== Building a multipart/form-data body ====
--0xKhTmLbOuNdArY-26765320-0965465416-4395-BA24-AA5CF2B58A66
Content-Disposition: form-data; name="api_key"

*SECRET    --0xKhTmLbOuNdArY-26765320-0916-4395-BA24-AA5CF2B58A66
Content-Disposition: form-data; name="user_token"

Br300MCw4P-l06SFITFCHdiifBHdOCPczX0Y830Yfabox3wLMPs2s7MlWTAS7F2TlwuhL2kiZ7mEXeDWkmDi5g
--0xKhTmLbOuNdArY-26765320-0916-4395-BA24-AA5CF2B58A66
Content-Disposition: form-data; name="tag"

NPSH Live
--0xKhTmLbOuNdArY-26765320-0916-4395-BA24-AA5CF2B58A66
Content-Disposition: form-data; name="ip"

61.197.151.129
--0xKhTmLbOuNdArY-26765320-0916-4395-BA24-AA5CF2B58A66
Content-Disposition: form-data; name="longitude"

-122.357832
--0xKhTmLbOuNdArY-26765320-0916-4395-BA24-AA5CF2B58A66
Content-Disposition: form-data; name="latitude"

47.781178
--0xKhTmLbOuNdArY-26765320-0916-4395-BA24-AA5CF2B58A66
Content-Disposition: form-data; name="file"; filename="file"
Content-Type: application/octet-stream

[920870 bytes of data]
--0xKhTmLbOuNdArY-26765320-0916-4395-BA24-AA5CF2B58A66--
==== End of multipart/form-data body ====
2012-03-13 14:31:06.550 MYAPP[7805:8c07] [CONNECTION] Request <ASIFormDataRequest: 0xb9bc00> will not use a persistent connection
2012-03-13 14:31:06.819 MYAPP[7805:8c07] [THROTTLING] ===Used: 238 bytes of bandwidth in last measurement period===
wait_fences: failed to receive reply: 10004003
2012-03-13 14:31:07.992 MYAPP[7805:8c07] [THROTTLING] ===Used: 327680 bytes of bandwidth in last measurement period===
2012-03-13 14:31:09.053 MYAPP[7805:8c07] [THROTTLING] ===Used: 655360 bytes of bandwidth in last measurement period===
2012-03-13 14:31:09.820 MYAPP[7805:8c07] [STATUS] Request <ASIFormDataRequest: 0xb9bc00> finished uploading data
2012-03-13 14:31:10.070 MYAPP[7805:8c07] [THROTTLING] ===Used: 860720 bytes of bandwidth in last measurement period===
2012-03-13 14:31:11.320 MYAPP[7805:8c07] [THROTTLING] ===Used: 0 bytes of bandwidth in last measurement period===
2012-03-13 14:31:11.835 MYAPP[7805:8c07] [STATUS] Request <ASIFormDataRequest: 0xb9bc00> received response headers
2012-03-13 14:31:11.843 MYAPP[7805:8c07] [STATUS] Request <ASIFormDataRequest: 0xb9bc00> finished downloading data (105 bytes)
2012-03-13 14:31:11.854 MYAPP[7805:8c07] [STATUS] Request finished: <ASIFormDataRequest: 0xb9bc00>

上传失败:

[STATUS] Starting asynchronous request <ASIFormDataRequest: 0xb8e200>
wait_fences: failed to receive reply: 10004003
2012-03-13 14:21:03.093 MYAPP[7805:8c07] 
==== Building a multipart/form-data body ====
--0xKhTmLbOuNdArY-E6B28382AE4C-F123-499E-8076-19CC8D41F46E
Content-Disposition: form-data; name="api_key"

*secret
--0xKhTmLbOuNdArY-E6B2AE4C-F123-499E-8076-19CC8D41F46E
Content-Disposition: form-data; name="user_token"

Br300MCw4P-l06SFITFCHdiifBHdOCPczX0Y830Yfabox3wLMPs2s7MlWTAS7F2TlwuhL2kiZ7mEXeDWkmDi5g
--0xKhTmLbOuNdArY-E6B2AE4C-F123-499E-8076-19CC8D41F46E
Content-Disposition: form-data; name="tag"

test
--0xKhTmLbOuNdArY-E6B2AE4C-F123-499E-8076-19CC8D41F46E
Content-Disposition: form-data; name="ip"

81.197.151.699
--0xKhTmLbOuNdArY-E6B2AE4C-F123-499E-8076-19CC8D41F46E
Content-Disposition: form-data; name="longitude"

-122.357874
--0xKhTmLbOuNdArY-E6B2AE4C-F123-499E-8076-19CC8D41F46E
Content-Disposition: form-data; name="latitude"

47.781192
--0xKhTmLbOuNdArY-E6B2AE4C-F123-499E-8076-19CC8D41F46E
Content-Disposition: form-data; name="file"; filename="file"
Content-Type: application/octet-stream

[3280300 bytes of data]
--0xKhTmLbOuNdArY-E6B2AE4C-F123-499E-8076-19CC8D41F46E    --
==== End of multipart/form-data body ====
2012-03-13 14:21:03.099 MYAPP[7805:8c07] [CONNECTION] Request <ASIFormDataRequest: 0xb8e200> will not use a persistent connection
2012-03-13 14:21:03.354 MYAPP[7805:8c07] [THROTTLING] ===Used: 2500 bytes of bandwidth in last measurement period===
2012-03-13 14:21:04.605 MYAPP[7805:8c07] [THROTTLING] ===Used: 0 bytes of bandwidth in last measurement period===
2012-03-13 14:21:05.698 MYAPP[7805:8c07] [THROTTLING] ===Used: 458752 bytes of bandwidth in last measurement period===
2012-03-13 14:21:06.744 MYAPP[7805:8c07] [THROTTLING] ===Used: 688128 bytes of bandwidth in last measurement period===
2012-03-13 14:21:07.755 MYAPP[7805:8c07] [THROTTLING] ===Used: 1114112 bytes of bandwidth in last measurement period===
2012-03-13 14:21:08.855 MYAPP[7805:8c07] [THROTTLING] ===Used: 950272 bytes of bandwidth in last measurement period===
2012-03-13 14:21:09.897 MYAPP[7805:8c07] [THROTTLING] ===Used: 458752 bytes of bandwidth in last measurement period===
2012-03-13 14:21:11.050 MYAPP[7805:8c07] [THROTTLING] ===Used: 393216 bytes of bandwidth in last measurement period===
2012-03-13 14:21:12.085 MYAPP[7805:8c07] [THROTTLING] ===Used: 917504 bytes of bandwidth in last measurement period===
2012-03-13 14:21:13.104 MYAPP[7805:8c07] [THROTTLING] ===Used: 458752 bytes of bandwidth in last measurement period===
2012-03-13 14:21:13.858 MYAPP[7805:8c07] [STATUS] Request <ASIFormDataRequest: 0xb8e200> finished uploading data
2012-03-13 14:21:14.354 MYAPP[7805:8c07] [THROTTLING] ===Used: 1123122 bytes of bandwidth in last measurement period===
2012-03-13 14:21:15.014 MYAPP[7805:8c07] [STATUS] Request <ASIFormDataRequest: 0xb8e200> received response headers
2012-03-13 14:21:15.017 MYAPP[7805:8c07] [STATUS] Request <ASIFormDataRequest: 0xb8e200> finished downloading data (76 bytes)
2012-03-13 14:21:15.034 MYAPP[7805:8c07] [STATUS] Request finished: <ASIFormDataRequest: 0xb8e200>

那么你们认为问题可能是什么。 另一个注意事项:我尝试使用其他 wifi 连接以及关闭 wifi,使用 3g 并关闭 3g 并仅使用 wifi。 您认为用户可以在 iPhone 上上传的数量有限制吗?

最后一点:

上传显然是成功的,但我想我上传的文件一起变得无效。 我的服务器通过告诉我一切都已设置好但视频文件本身来成功响应。 视频文件无效。 然而它在模拟器中工作......

编辑!!

我刚刚尝试了不同的上传方法,在完全相同的情况下我得到了完全相同的错误,所以我开始认为这与我的核心文件有关? 也许它是一个记忆的东西?

 NSURL *remoteUrl = [NSURL URLWithString:@"http://api.mysite.com/upload"];

NSURL *myfile = [NSURL URLWithString:m_pAppDelegate.m_pAppData.m_PendingInfo.m_pMovieURL];


NSData * photoImageData = [NSData dataWithContentsOfFile: m_pAppDelegate.m_pAppData.m_PendingInfo.m_pMovieURL];
NSError **error;



  // [photoImageData writeToFile:filePath atomically:YES];

   AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:remoteUrl];
NSMutableURLRequest *afRequest = [httpClient multipartFormRequestWithMethod:@"POST" 
                                                                       path:@"" 
                                                                 parameters:nil 
                                                  constructingBodyWithBlock:^(id <AFMultipartFormData>formData) 
                                  {
                                      [formData appendPartWithFormData:[API_KEY dataUsingEncoding:NSUTF8StringEncoding] 
                                                                  name:@"api_key"];
                                      [formData appendPartWithFormData:[m_pAppDelegate.m_pAppData.m_sTokenKey dataUsingEncoding:NSUTF8StringEncoding] 
                                                                  name:@"user_token"];


                                      [formData appendPartWithFileData:photoImageData 
                                                                  name:@"file" 
                                                              fileName:@"test.mov" 
                                                              mimeType:@"video/quicktime"]; 
                                      [formData appendPartWithFileURL:myfile name:@"file" error:error];
                                  }
                                  ];

AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:afRequest];
[operation setUploadProgressBlock:^(NSInteger bytesWritten, NSInteger totalBytesWritten, NSInteger totalBytesExpectedToWrite) {

    NSLog(@"Sent %d of %d bytes", totalBytesWritten, totalBytesExpectedToWrite);

}];

[operation setCompletionBlock:^{
    NSLog(@"%@", operation.responseString); //Gives a very scary warning
}];

[operation start];   
回答1

您需要增加请求的timeOutSeconds 。请求的默认时间为 60 秒。您可能会增加到 10 分钟(600 秒)。

[request setTimeOutSeconds:600];

您还需要检查 php 中指定的最大上传文件大小。请查看此链接,这可能对您有所帮助。 http://drupal.org/node/97193

回答2

原来是我的 .htpconfig 文件中的一个问题。 我对它设置了严格的限制。 调整它就像一个魅力!

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • 将图像/音频从 iPhone 上传到服务器无法发送大图像(uploading images/audio from iPhone to server not able to send big images)
    问题 我不知道这是我的 iPhone 代码还是服务器的问题。 我正在使用 NSURLConnection 将图像/音频从 iPhone 上传到服务器。 如果图像和音频的大小小于 60KB,则可以正常上传。 如果超过 60KB,我会收到来自服务器的 400 Bad Request 响应。 我不确定发生了什么。 我不知道有人可以帮助我吗 我的网络服务器是在 Windows 2008 R2 上运行的 IIS。 Web 服务是在 .NET 中开发的 问候 回答1 听起来像只发送了一大块数据。 我使用 ASIHTTPRequest 来接收/发送数据。 ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url]; [request addPostValue:@"Ben" forKey:@"names"]; [request addPostValue:@"George" forKey:@"names"]; [request addFile:@"/Users/ben/Desktop/ben.jpg" forKey:@"photos"]; [request addData:imageData withFileName:@"george.jpg" andContentType:@"image/jpeg" forKey:@
  • 用iPhone上传视频(Uploading Video with iPhone)
    问题 是否可以将视频上传到服务器? 我知道图像是可能的。 如果有人可以将我指向正确的方向,那就太好了。 谢谢 回答1 于2015年8月编辑 现在,这个答案已经严重过时了。 在撰写本文时,没有太多选择,并且视频的大小相对较小。 如果您现在正在考虑这样做,我将使用AFNetworking ,它使此过程变得更加简单。 它将从文件流式传输而不是将其全部保存在内存中,并且还支持新的Apple后台上传任务。 此处的文档:https://github.com/AFNetworking/AFNetworking#creating-an-upload-task -- 是的,这是可能的,这就是我的解决方法。 实现以下功能,该功能在媒体选择器完成时运行。 - (NSData *)generatePostDataForData:(NSData *)uploadData { // Generate the post header: NSString *post = [NSString stringWithCString:"--AaB03x\r\nContent-Disposition: form-data; name=\"upload[file]\"; filename=\"somefile\"\r\nContent-Type: application/octet-stream\r\nContent
  • 如何在iPhone的网络服务器上上传大小不超过5 mb的mp3文件(How to upload a mp3 file upto 5 mb size on webserver in iPhone)
    问题 我想将音频文件从我的iPhone应用程序上传到Web服务器,但是当我将其转换为NSData时,它最多需要30到40分钟的转换时间,因此您能为它提供更好的解决方案吗? 回答1 1)。将音频文件转换为NSData: NSString *audioFilePath = @""; // local path where audio stored NSData *audioData = [[NSData alloc] initWithContentsOfFile:audioFilePath]; 2)。要上传音频文件: NSString *audioName = @"myAudio.caf"; ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:[NSURL URLWithString:@"http://someurl.aspx"]]; [request addData:audioData withFileName:audioName andContentType:@"audio/caf" forKey:@"audioFile"]; [request setDelegate:self]; [request setTimeOutSeconds:500]; [request setDidFinishSelector
  • 如何以编程方式在 iPhone 应用程序中使用 Twitvid 在 Twitter 上上传视频(How to upload Video on Twitter using Twitvid in iPhone application programmatically)
    问题 如何通过编程在 iPhone 应用程序中使用 Twitvid 在 Twitter 上上传视频? 回答1 我没有可以给你的代码,我不知道有一个库可以轻松完成所有工作,但我建议你查看 TwitVid 文档:http://twitvid.pbworks.com/ w/page/22556295/FrontPage 为了完成所需的 OAuth 请求,我建议您使用 ASIFormDataRequest 类:http://allseeing-i.com/ASIHTTPRequest/
  • 将图像或视频添加到iPhone模拟器(Adding images or videos to iPhone Simulator)
    问题 我正在尝试将UIImagePickerController与UIImagePickerControllerSourceTypePhotoLibrary一起使用,但显示“没有照片”。 模拟器从何处获取图像? 我应该在哪里复制图像,以便在模拟器中显示它们? 回答1 将图像,视频等内容下载到模拟器上的最简单方法是将它们从计算机拖放到模拟器上。 这将导致模拟器打开“照片”应用程序并开始填充图库。 如果您想要一个可编写脚本的方法,请继续阅读。 注意-尽管这是有效且可行的,但我认为下面的Koen解决方案现在是更好的解决方案,因为它不需要重新启动模拟器。 通过转到xCode->设备,选择模拟器并检查标识符值来标识模拟器。 或者,您可以确保模拟器正在运行,然后运行以下命令以获取设备ID xcrun simctl list | grep Booted xcrun simctl list | grep Booted 去 〜/库/开发人员/ CoreSimulator /设备/ [仿真器标识符] / data / Media / DCIM / 100APPLE 并添加IMG_nnnn.THM和IMG_nnnn.JPG。 然后,您将需要重置模拟器(硬件->重新引导),以使其注意到新的更改。 它们不是JPEG也没关系-它们都可以是PNG,但是看来它们必须同时存在才能正常工作。 如果DCIM不存在
  • 在 iPhone 上的 Objective C 中使用 OAuth 将照片上传到 TwitPic 时遇到问题(Having problems with uploading photos to TwitPic using OAuth in Objective C on the iPhone)
    问题 我一直在开发具有将照片上传到 TwitPic 的功能的 iPhone 应用程序。 我让它与基本身份验证一起使用。 我试图让它与 OAuth 一起工作。 我收到身份验证错误。 我非常仔细地研究了 TwitPic 文档。 我通过显示 UI Web 视图来授权应用程序,它返回一个 PIN 值。 我在应用程序中输入 PIN 值并请求令牌。 我可以将状态更新上传到 Twitter,但不能上传照片。 我的代码基于这里的一些示例代码: 使用 OAuth 的 iPhone 应用示例 这是我的代码: NSString *url = @"http://api.twitpic.com/2/upload.json"; NSString *oauth_header = [oAuth oAuthHeaderForMethod:@"POST" andUrl:url andParams:nil]; NSLog(@"OAuth header : %@\n\n", oauth_header); ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:[NSURL URLWithString:url]]; [request addRequestHeader:@"User-Agent" value:@"ASIHTTPRequest"]
  • 捕获iOS模拟器视频以进行App预览(Capture iOS Simulator video for App Preview)
    问题 好的,现在我们可以在App Store上提交我们应用程序的视频预览。 根据苹果公司的说法,我们应该使用iOS8设备和OSX 10.10. 问题是您必须拥有所有不同的设备(4“,4.7”,5.5“和iPad)。 是否有替代方法? 我正在考虑捕获模拟器的视频。 问题是当以100%分辨率显示时,设备屏幕大于我的FullHD显示器。 有什么解决方案可以从模拟器中以全分辨率捕获视频吗? 编辑:由于很多人都在回答我不问的问题,让我说:-记录一个设备的大小并缩放它不是我要的; -如何记录任何应用程序预览不是我要的; -我不是在问您如何预览? 我要问的是,如果屏幕上不适合显示,您能否以100%的分辨率录制来自模拟器的视频? 回答1 对于Xcode 8.2或更高版本 您可以使用xcrun simctl来拍摄Simulator的视频和屏幕截图, xcrun simctl是用于控制Simulator的命令行实用程序 在模拟器上运行您的应用打开一个终端运行命令截屏xcrun simctl io booted screenshot <filename>.<file extension> 例如: xcrun simctl io booted screenshot myScreenshot.png 拍摄视频xcrun simctl io booted recordVideo <filename>
  • ASIHTTPRequest 问题(ASIHTTPRequest problem)
    问题 我之前发布了一个问题,但不幸的是我没有得到任何有用的答案,所以我会以不同的方式尝试。 这是场景。 我在托管环境中设置了一个简单的 WCF RESTful 服务。 我正在尝试从 iphone 4 与此服务进行通信。这是有效的。 我设置了两个 uri 模板。 一种用于 GET,一种用于 POST。 在我的本地机器上运行控制台应用程序,我能够获取和发布数据。 从请求中提取的数据并发送到 mysql 数据库。 在 iphone 上,我能够获取数据。 毫无疑问,我无法从 iphone 发布数据。 我一直在努力使 ASIHTTPResuest 工作。 当我发送请求时,我会返回 responseStatusCode 200。 我尝试使用 NSmutableTableRequest 创建请求,但这也不起作用。 请求发送没有错误。 在这一点上,我假设 POST 请求是正确的,因为我没有收到任何错误,但不知何故网络服务无法从 XML 正文中获取数据。 我仍然在 WCF 学习过程中,所以我在这里错过了一些“基本”的东西。 请问这个Datacontract和Operationcontact [OperationContract] [WebInvoke(UriTemplate = "/create", Method = "POST", RequestFormat=WebMessageFormat
  • 如何将图像上传到 asp.net 服务器而不在 iPhone 中转换为 NSData(How upload image in to asp.net server without converting into NSData in iPhone)
    问题 我将使用下面的 POST 方法代码块将图像文件上传到 asp.net Api... 在 uploadViewController.h IBOutlet UIProgressView *progressIndicator; IBOutlet UIImageView *imageview; ASIFormDataRequest *request; 在 uploadViewController.m 中 -(void)upload { [request cancel]; double compressionRatio=1; NSData *imageData = UIImageJPEGRepresentation(imageview.image, 0.9); while ([imageData length]>50000) { compressionRatio=compressionRatio*0.5; imageData=UIImageJPEGRepresentation([imageview image], compressionRatio); } NSString *Senderid=@"465465354313"; NSString *ID=@"265446"; NSString *Devtype=@"iphone"; NSURL *url=[NSURL
  • 用AI「复活」逝者:「深度怀旧」项目火遍推特,我们也用民国老照片试了下
    最终,我们或许能让那些过去的人们,「亲自」为我们讲述他们自己的故事。最近几个星期,一股由 AI 引发的「动起来」趋势席卷全网,各种让照片变视频的动画不时出现在各大社交网络的时间线上,有的还配上了音乐。在层出不穷的应用之后,又有一个 AI 动图生成器脱颖而出,在线家谱服务公司 MyHeritage 提供的 Deep Nostalgia 服务可以为静态照片创建最佳的运动效果,成为了上个周末的热门事件。他们提供的工具有点像 iPhone 上的 Live Photos 功能,其可以自动生成几秒钟的视频,以帮助智能手机摄影者找到最佳拍摄角度。不过与 iPhone 上基于多张照片合成加挑选的方法不同,Deep Nostalgia 可以让任何相机拍摄的内容「活起来」。该工具创造的短视频中,人物以 AI 训练过程中示例人物的动作摆姿势,其目的是帮助人们以全新的视角看看过去亲人的照片。与那些以 app 形式存在的产品不同,使用 MyHeritage 图片工具只需在他们的网站上免费注册一个账户,然后上传照片就可以了(前几张免费)。图片处理的过程是完全自动化的。如果你的老照片分辨率有点低也不是问题——Deep Nostalgia 会自动对图像进行超分辨率等增强操作,然后才进行处理。工具链接:https://www.myheritage.com/deep-nostalgia另外还有人们担心的隐私问题
  • 如何将视频保存在documents文件夹中然后上传到服务器(How to save video in documents folder then upload to server [duplicate])
    问题 这个问题已经在这里有了答案: 如何在ipad应用程序中录制视频剪辑并将其存储在documents文件夹中(3个答案) 8年前关闭。 我正在从iPad应用程序录制视频,我希望该视频可以保存在documents文件夹中,或者直接将其上传到服务器。 我已经将音频文件存储在文档中,但是如何保存视频文件。 我正在使用以下代码来录制视频。 UIImagePickerController *picker = [[UIImagePickerController alloc] init]; picker.delegate = self; if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) { NSArray *mediaTypes = [NSArray arrayWithObject:(NSString*)kUTTypeMovie]; picker.mediaTypes = mediaTypes ; picker.sourceType = UIImagePickerControllerSourceTypeCamera; picker.cameraCaptureMode = UIImagePickerControllerCameraCaptureModeVideo
  • iOS 中的大型 Base64 上传(Large Base64 uploads in iOS)
    问题 描述:我需要在代表要上传的文件的 HTTP POST 参数中发送一个 base 64 编码的字符串。 当前方法:我正在使用 ASIFormDataRequest 并将我的文件编码为 base64 字符串,如下所示: NSData *data = [[NSFileManager defaultManager] contentsAtPath:@"my path here"]; NSString *base64Data = [data encodeBase64ForData]; 然而,当上传大文件时,应用程序内存不足并死得可怕! 建议的解决方案:现在有没有人我会怎么做,比如说,从磁盘读取文件,将其转换为块中的 base64 字符串并将转换后的 base64 字符串附加到 HTTP 请求中的参数? 有效地避免将整个文件读入内存的任何方式。 任何投入将不胜感激! 我的http请求代码完整: NSURL *url = [NSURL URLWithString:requestProgressURLString]; NSData *data = [[NSFileManager defaultManager] contentsAtPath:evidence.uri]; NSString *base64Data = [data encodeBase64ForData]; NSURL
  • 通过从 iphone 浏览文件上传和发送文件(upload and send file by browsing a file from iphone)
    问题 我正在制作一个应用程序,用户可以在其中聊天并从该应用程序发送文件。 但是我坚持用户可以通过附件将任何文件发送给其他用户,但我没有找到任何示例应用程序或帮助代码,所以任何人都可以帮助我解决我的问题。 告诉我一些示例应用程序链接以及通过使用应用程序从 iPhone 浏览文件上传和发送文件的技术。 回答1 实现这一目标的一些建议 浏览 上传 聊天 回答2 让我先给你一些建议,只需像这样从设备上传文件 1. - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { NSString *mediaType = info[UIImagePickerControllerMediaType]; if ([mediaType isEqualToString:(NSString *)kUTTypeImage]) { // Media is an image picImage = [info objectForKey:UIImagePickerControllerOriginalImage]; NSString *imagePath = [NSHomeDirectory()
  • 移动地图时,Xcode 9 模拟器上的 GoogleMaps 使用超过 100% 的 CPU(GoogleMaps on simulator in Xcode 9 uses over 100% of CPU when moving the map)
    问题 所以我现在已经将我的项目转换为在 Xcode 9 中使用 Swift 4,并开始测试我的应用程序。 这是一个带有四个不同选项卡的大型应用程序,几乎一切都按预期工作。 其中一个选项卡是使用 GoogleMaps 的地图。 我从来没有遇到过任何问题,但是当使用 Xcode 9 构建并在模拟器中显示时,它在移动地图时使用了超过100% 的 CPU,并且非常滞后。 这是在模拟器上运行时的调试导航器。 我们做了一些自定义绘图,但不是 102% 的绘图。 这仅在我更新到 Xcode 9 和 Swift 4 后才开始发生。在 iPhone 7、8 或 X模拟器上的 Xcode 9 中调试时,全部使用 iOS 11,CPU 占用率超过 100%,并且完全停止更新 UI每次我尝试移动它大约一秒钟。 我开始拖动手势,但 UI 每秒只更新一次。 有效地给我大约1fps 。 但是,当在带有iOS 9的 iPhone 6模拟器上使用 Xcode 9 进行调试时,移动地图时它会达到约 90%,并且几乎没有滞后。 我猜我在这里得到了大约 20-30 fps。 (这可能与我在 Xcode 8 上的模拟器中获得的 fps 相同。地图在模拟器上从未真正流畅..) 在实际设备(iPhone 7、iOS 11)上运行时,CPU 在不断移动地图时使用大约 40%,并且工作非常流畅,完全没有延迟(60fps)。
  • 检测设备是否为iOS(Detect if device is iOS)
    问题 我想知道是否有可能检测浏览器是否在iOS上运行,这与使用Modernizr进行功能检测的方式类似(尽管这显然是设备检测而非功能检测)。 通常,我宁愿使用功能检测,但我需要根据该问题确定设备是否为iOS,因为它们处理视频的方式YouTube API无法在iPad / iPhone /非Flash设备上使用 回答1 检测iOS 在iOS 13 iPad上,用户代理和平台字符串都已更改,并且有可能在iPad和MacOS之间进行区分,因此,下面的所有答案都需要现在考虑到这一点。 这可能是涵盖iOS 13的最短替代方法: function iOS() { return [ 'iPad Simulator', 'iPhone Simulator', 'iPod Simulator', 'iPad', 'iPhone', 'iPod' ].includes(navigator.platform) // iPad on iOS 13 detection || (navigator.userAgent.includes("Mac") && "ontouchend" in document) } iOS将是true还是false 更糟糕的选择:用户代理嗅探 用户代理嗅探更为危险,并且经常出现问题。 在iPad iOS 13上,用户代理与MacOS 13计算机上的代理相同,但是如果您忽略iPad
  • Ad Hoc iPhone SIGSEGV 崩溃,而设备和模拟器上的调试工作(Ad Hoc iPhone SIGSEGV crash while Debug on device & simulator works)
    问题 我尝试登录后应用程序立即崩溃,因此它不是看门狗内存问题 原因:_mh_execute_header 应用程序在尝试使用 ASIHTTPRequest 发出网络请求时崩溃。 请求从不接触服务器。 ASIHTTPRequest:我使用 -fno-objc-arc 来省略来自 ARC 的 ASIHTTPRequest。 我相信以下调用会导致我的问题,因为当我发出请求时,我的调用甚至从未接触过服务器。 任何帮助将不胜感激! 称呼: NSDictionary *response = [[NetworkManager sharedManager] loginWithName:name password:pwd]; 方法: - (NSDictionary *)loginWithName:(NSString *)name password:(NSString *)pwd { NSURL *url = [NSURL URLWithString:@"http://www.test.com/keys"]; NSArray *values = [NSArray arrayWithObjects:@"iphone", @"iphone@test.com", name, pwd, nil]; NSArray *keys = [NSArray arrayWithObjects:@"name", @
  • 看视频学杂耍?伯克利的机器人已经可以做到了
    模仿 YouTube 视频中的角色无论是洗手这样的日常动作,还是惊人的杂技表演,人类都能通过观察他人来学习一系列令人难以置信的技能。随着像 YouTube 这样的公开视频数据越来越多,现在,要找到我们感兴趣的任何技能的视频剪辑,比以往更容易了。每分钟都有超过 300 个小时的视频上传到 YouTube。不幸的是,对我们的机器人来说,从大量的视觉数据中学习技能,仍然是一个巨大的挑战。大多数模仿学习方法都需要简洁的表示,例如从动作捕捉(motion capture,缩写 mocap)记录的表示。但获取 mocap 数据可能是一件很麻烦的事,因为通常需要使用大量的仪器才能获取。mocap 系统也往往局限于最小封闭空间的室内环境中,这点很可能会限制可记录的技能类型。如果我们的智能体也可以通过视频来学会技能,那岂不是很好?为了解决这一目标,我们提出了一个从视频中学习技能(Learning skills from videos,SFV)的框架。通过结合计算机视觉和强化学习的最先进技术,我们的系统模拟角色能够从视频剪辑中学习各种各样的技能。给定一个演员表演某种技能的视频,比如侧手翻或后空翻,我们的角色就能够学习在物理模拟中重现这种技能的策略,而无需任何姿态的手动注释。从视频中学会全身动作技能,在计算图形学领域中引起了一些关注。以前的技术通常依赖于手工制作的控制结构
  • 硬件加速 h.264 解码到 iOS 中的纹理、覆盖或类似内容(Hardware accelerated h.264 decoding to texture, overlay or similar in iOS)
    问题 是否可以并支持使用 iOS 硬件加速的 h.264 解码 API 来解码本地(非流式)视频文件,然后在其上组合其他对象? 我想制作一个应用程序,它涉及在视频前面绘制图形对象,并使用播放计时器将我在顶部绘制的内容与视频中正在播放的内容同步。 然后,根据用户的操作,更改我在顶部绘制的内容(但不是视频) 来自 Android 的 DirectX、OpenGL 和 OpenGL ES,我想像将视频渲染为纹理,并使用该纹理绘制全屏四边形,然后使用其他精灵绘制其余对象; 或者在渲染器之前编写一个中间过滤器,这样我就可以操纵各个输出帧并绘制我的东西; 或者可能绘制到视频顶部的 2D 图层。 看起来 AV Foundation 或 Core Media可能会帮助我做我正在做的事情,但在深入研究细节之前,我想知道是否有可能做我想做的事情,我的主要工作是什么解决问题的途径。 请不要回答“这对您来说太高级了,请先尝试 hello world”。 在我自己研究细节之前,我知道我的东西,只想知道我想做的事情是否可行(最重要的是,支持,所以应用程序最终不会被拒绝)。 编辑: 我不熟悉 iOS 开发,但专业地为 Android 开发 DirectX、OpenGL 和 OpenGL ES。 我正在考虑制作我目前拥有的 Android 应用程序的 iOS 版本,我只想知道这是否可行。 如果是这样
  • HTML5视频标签无法在Safari,iPhone和iPad中使用(HTML5 Video tag not working in Safari , iPhone and iPad)
    问题 我正在尝试创建一个html5网页,其中有一个类似于13s的小视频,我将该视频的Flash版本转换为3种格式:使用fireFogg的.ogv,还使用firefogg的.webm以及使用HandBrake应用程序的html脚本的.mp4我在我的页面中使用过: <video width="800" height="640" loop preload="false" autoplay controls tabindex="0"> <source src="xmasvideo/video.mp4" type="video/mp4" /> <source src="xmasvideo/M&P-Xmas 2.ogv" type="video/ogv" /> <source type="video/webm" src="xmasvideo/M&P-Xmas.webm" /> </video> 该视频在Chrome和FireFox中运行良好,但在Safari浏览器,台式机以及iPhone或iPad上都无法正常工作,输出只是一个空白页,显示了视频标签的控件,但未加载任何内容 请注意,我拥有的Safari版本支持HTML5视频 回答1 我在苹果设备(例如iPhone和iPad)上遇到了同样的问题,我关闭了低功耗模式,并且它起作用了,您还应该在视频标签中包含playsinline属性,如下所示:
  • iPhone 应用中的 Vimeo 视频(Vimeo videos in iPhone app)
    问题 我想知道是否有办法在 iPhone 应用程序中“嵌入”Vimeo 视频。 对于 YouTube 视频,我使用包含正确的 YouTube 视频嵌入代码的 web 视图,然后 iPhone 的本机 YouTube 支持会将 Flash 播放器转换为 YouTube 按钮。 有没有类似的方法可以从我的应用中播放 Vimeo 视频? 也许有人知道 Vimeo 视频的正确<video> -src ? 谢谢,托马斯 回答1 似乎 vimeo 正在将这些天上传的所有视频转码为与 iphone 兼容的版本,当您从 iphone 或 ipad 浏览时,这些版本在其网站上使用。 但是,您可以通过执行此处找到的一些简单技巧,将他们的视频调用到您网站上的 HTML5 播放器中。 如果你可以在你的网站上的某个地方托管一个页面,你可以将视频加载到 UIWebView 中,它应该都能正常工作。 Vimeo 的唯一限制是嵌入代码是 flash,但视频基础设施完全适用于 HTML5。 希望这可以帮助! 回答2 这是在 UIWebview 中嵌入 vimeo 视频的代码 <iframe src='http://player.vimeo.com/video/12345678?title=0&byline=0&portrait=0' width='320' height='480' frameborder='0'>