Actionscript 3 如何通过php在服务器上保存bytearray?

Actionscript 3 如何通过php在服务器上保存bytearray?,actionscript-3,Actionscript 3,我使用的是简单的as3+php,中间没有FMS之类的。我正在制作一个视频录制应用程序,我可以捕获帧并将其转换为flv编码的teArray。但当我试图将其保存到服务器上时,问题就出现了。如果我通过base64 encode将bytearray转换为字符串,然后将该字符串发送到服务器,一切正常,但问题是,由于它是一个视频文件,它可能非常大,比如20mb左右,因此需要很长时间对其进行编码然后上传,而且通常在编码过程中会出现脚本超时。为了加快速度,我尝试直接发送bytearray,但我的firebug

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

//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' ]);
?>

在中,它指定了直接使用ByteArray的选项

这里,


然后,您可以跳过
urlvaries
对象,该对象依赖于将传输的数据编码为
application/x-www-form-urlencoded
,该对象不适合二进制数据(即使处理正确,也可能不适合)。

也许您应该将其用于原始数据输入:


我有几天遇到了类似的问题,并且发布了只有base64编码/解码才能解决这个问题。类似的症状只有几个字节等。所以只需进入base64“方向”来解决这个问题

ooh谢谢,我不知道。这一次,虽然看起来数据正在发送,但视频文件没有生成……我得到的是0kb flv文件。不确定您的PHP代码是否仍如上图所示——您显然不想对该输入进行base64_解码@亚当的建议看起来很合理,但我不是一个PHP的人。谢谢你们,我希望我能选择两个答案…但真的,非常感谢
urlLoader.data = _baFlvEncoder.byteArray;
$input = file_get_contents("php://input");