我正在使用简单的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' ]);
?>
ooh谢谢,我不知道这一点。这一次,虽然看起来数据正在发送,视频文件没有被生成....我得到0kb flv文件。 – Bluemagica 2012-08-14 02:47:51
不知道你的PHP代码是否仍然如上所示 - 你显然不希望base64_decode这个输入。 @亚当在这里的建议看起来很合理,但我不是一个PHP人。 – 2012-08-14 02:52:21
我更新了代码以反映更改。请看看... – Bluemagica 2012-08-14 02:54:35