我正在查看netstream文档。但无法真正了解appendBytes()是否真的可以获取任意数据。我真的可以只取任意位图数据(作为字节数组)并将帧附加到流中吗(大概是在将其发送到FMS以保存文件之前)?我想我错了:它只对动态流媒体有用。我知道有可能通过FMS获取网络摄像头并直接对视频进行编码。但是假设我想在编码之前添加一些覆盖,这在Flash中可能吗?也就是说,你能在Flash中动态生成netStream对象吗?或者你唯一能做的就是从netStream中绘制位图数据,反之亦然?
基本上,目标是像Movie Masher一样操作视频和音频,并直接保存实际的视频文件。Movie Masher实际上会将单个帧保存到服务器中,以便以后进行转换。
我听说FP11有本地H264编码——所以"规范"问题是:最终的netStream是否可以在浏览器中编码,然后通过HTTP上传到服务器,或者FMS仍然是一个要求?我正在看这个实时编码器演示,但我不确定他们是否只是将FMS用作文件转储,或者它是否是过程的一部分。
有一个用于编码FLV的开源项目,它使用ByteArrayFlvEncoder,允许您对原始ByteArrays进行编码。H264有等效物吗?
根据文档,似乎不可能使用本机编码器,因为您无法同时利用NetStream.publish()
和NetStream.appendBytes()
:
NetStream既可以发布流,也可以播放流,但不能两者兼而有之。要发布流并从服务器上查看播放,请创建两个NetStream对象。
换句话说,似乎没有办法通过NetStream
对象向FMS发送自定义数据。
所以,你可以:
- 将相机连接到
Video
对象 - 通过像素操作对其应用一系列效果
- 通过套接字将像素数据发送到服务器以供稍后编码,或者使用您提到的AS3编码器将烘焙的FLV保存为文件(在用户的计算机或服务器上)
与NetStreamAppendBytesAction类一起使用的NetStream类上的appendBytes。
示例代码:参考演示:http://www.bytearray.org/?p=1689
// retrieve the FLV stream
var bytes:ByteArray = event.currentTarget.data;
// put the NetStream class into Data Generation mode
netstream.play(null);
// before appending new bytes, reset the position to the beginning
netstream.appendBytesAction(NetStreamAppendBytesAction.RESET_BEGIN);
// append the FLV video bytes
netstream.appendBytes(bytes);