2012-08-14 78 views
2

我正在使用简单的as3 + php,没有FMS或之间的这种。我正在制作一个视频录制应用程序,我可以捕获帧并将它们转换为flv编码的bytearray。但是当我尝试将它保存在服务器上时,问题就会发生。如果我通过base64编码将字节数组转换为字符串,然后将该字符串发送到服务器,所有工作都可以,但问题是由于它是一个视频文件,它可能非常大,例如20mb左右,因此需要很长一段时间才能对其进行编码并上传,而且在编码过程中通常会发生脚本超时。为了加快速度,我试图直接发送字节数组,但是我的萤火虫网络面板显示发送的数据大约在20-46字节。请告诉我我做错了什么。如何通过php在服务器上保存bytearray?

//var encoded_str = Base64.encodeByteArray(_baFlvEncoder.byteArray); 
      //Handle Upload 
      /*var url_data:URLVariables = new URLVariables(); 
      url_data.data = _baFlvEncoder.byteArray;*/ 
      var url_ref:URLRequest = new URLRequest("save_vid.php"); 

      url_ref.contentType = 'application/octet-stream'; 
      url_ref.data = _baFlvEncoder.byteArray;//url_data; 
      url_ref.method = URLRequestMethod.POST; 

      var urlLoader:URLLoader = new URLLoader(); 

      // just making sure the server knows we are sending data in proper format 
      //urlLoader.dataFormat = URLLoaderDataFormat.TEXT; 
      urlLoader.dataFormat = URLLoaderDataFormat.BINARY; 

      try { 
       urlLoader.load(url_ref); 
      } catch (e:Error) { 
       trace(e); 
      } 

我的PHP代码:

<?php 
echo 'Data:<pre>'; 
print_r($_POST); 
echo '</pre>'; 
//$decodedData= base64_decode($GLOBALS[ 'HTTP_RAW_POST_DATA' ]); 
//file_put_contents("test.flv",$decodedData); 
file_put_contents("test.flv",$GLOBALS[ 'HTTP_RAW_POST_DATA' ]); 
?> 

回答

4

URLRequest.data documentation,它指定直接使用的ByteArray的选项。

这里,

urlLoader.data = _baFlvEncoder.byteArray; 

然后,您可以跳过URLVariables对象,它依赖于编码的传输数据application/x-www-form-urlencoded,这是不适合二进制数据(即使它被妥善处理,它可能不是)。

+0

ooh谢谢,我不知道这一点。这一次,虽然看起来数据正在发送,视频文件没有被生成....我得到0kb flv文件。 – Bluemagica 2012-08-14 02:47:51

+0

不知道你的PHP代码是否仍然如上所示 - 你显然不希望base64_decode这个输入。 @亚当在这里的建议看起来很合理,但我不是一个PHP人。 – 2012-08-14 02:52:21

+0

我更新了代码以反映更改。请看看... – Bluemagica 2012-08-14 02:54:35

3

也许你应该使用这个原始数据输入:

$input = file_get_contents("php://input"); 
+1

谢谢你,我希望我可以选择两个答案....但真的,非常感谢 – Bluemagica 2012-08-14 02:59:37

0

我用类似的问题堆积了几天,发布,只有使用Base64编码/解码解决这个问题。类似的症状只是几个字节去等,所以只需进入base64“方向”来解决这个问题

相关问题