【发布时间】:2011-03-24 06:18:25
【问题描述】:
我的本地系统中有一个视频文件。我在我的系统中使用的是 Windows XP。现在我想将此视频文件字节数组发送到 Flash Builder (Flex 4) 中的服务器。我在服务器端使用 PHP。
我该怎么做?请指导
谢谢
【问题讨论】:
标签: apache-flex flex4 air flash-builder
我的本地系统中有一个视频文件。我在我的系统中使用的是 Windows XP。现在我想将此视频文件字节数组发送到 Flash Builder (Flex 4) 中的服务器。我在服务器端使用 PHP。
我该怎么做?请指导
谢谢
【问题讨论】:
标签: apache-flex flex4 air flash-builder
Socket.writeBytes() 会做你需要的。
【讨论】:
通过this link: .
// serialization
var serializedSound:ByteArray;
serializedSound = serializeSound(sound);
serializedSound.position = 0;
// unserialization
var newSound:Sound = new Sound();
newSound.addEventListener(SampleDataEvent.SAMPLE_DATA, deserialize);
newSound.play();
function serializeSound(sound:Sound):ByteArray
{
var result:ByteArray = new ByteArray();
while( sound.extract(result, 8192) ){
result.position = result.length;
}
return result;
}
function deserialize(e:SampleDataEvent):void
{
for ( var c:int=0; c<8192; c++ ) {
if(serializedSound.bytesAvailable < 2) break;
e.data.writeFloat(serializedSound.readFloat());
e.data.writeFloat(serializedSound.readFloat());
}
}
【讨论】:
您需要将字节数组发送到 PHP 还是同时获取字节数组?
你可以使用 Zend_AMF 发送字节数组: http://framework.zend.com/download/amf
它将处理所有的转换,在 php 中,您将通过变量将字节数组作为字符串获取(我使用变量引用为:&$file 以在调用方法时节省一些内存)
这里有一些可以帮助你的代码 sn-p: Sending ByteArray to Zend_Amf
为了获取字节数组,您可以使用FileReference load() 方法获取本地文件的所有字节数组。
【讨论】:
您知道在 Flex 中创建视频的 ByteArray 就是将该视频存储到内存中,对吗?任何类型的大型或未压缩视频都会使用大量客户端内存,如果 Flash 达到其内存限制,可能会导致错误。
我不认为你这样做是正确的。我建议你做的只是将视频上传到服务器,然后服务器访问其中的字节。如果您想将视频上传到服务器,请查看此处的本教程,该教程展示了如何从 Flex 上传文件以及获取和存储文件的 PHP 脚本:http://livedocs.adobe.com/flex/3/html/17_Networking_and_communications_7.html#118972
如果您愿意,PHP 可以从这里访问字节。
【讨论】:
AS3 代码:
uploadURL = new URLRequest();
uploadURL.url = "upload.php?fileName=videotrack";
uploadURL.contentType = 'application/octet-stream';
uploadURL.method = URLRequestMethod.POST;
uploadURL.data = rawBytes;
urlLoader = new URLLoader();
urlLoader.addEventListener(Event.COMPLETE, completeHandler);
urlLoader.load(uploadURL);
rawBytes 是您要上传到服务器的字节数组。
PHP 代码
$fileName = $_REQUEST['fileName'] . ".mp3";
$fp = fopen( $fileName, 'wb' );
fwrite( $fp, $GLOBALS[ 'HTTP_RAW_POST_DATA' ] );
fclose( $fp );
我使用了 .mp3 扩展名,因为我的字节数组是来自 mp3 文件的数据,但您可以将扩展名设置为字节数组所代表的任何类型的文件。
【讨论】: