2

我使用的是简单的 as3+php,中间没有 FMS 之类的。我正在制作一个视频录制应用程序,我可以捕获帧并将它们转换为 flv 编码的字节数组。但是当我尝试将其保存在服务器上时,就会出现问题。如果我通过 base64 编码将 bytearray 转换为字符串,然后将该字符串发送到服务器,一切正常,但问题是由于它是一个视频文件,它可能非常大,比如 20mb 左右,因此需要很长的时间来编码然后上传它,而且通常在编码过程中会发生脚本超时。为了让事情变得更快,我试图直接发送字节数组,但我的萤火虫网络面板显示正在发送的数据约为 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' ]);
?>
4

3 回答 3

4

URLRequest.data文档中,它指定了直接使用 ByteArray 的选项。

这里,

urlLoader.data = _baFlvEncoder.byteArray;

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

于 2012-08-14T02:40:51.710 回答
3

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

$input = file_get_contents("php://input");
于 2012-08-14T02:50:34.937 回答
0

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

于 2012-09-01T15:18:48.627 回答