2016-03-02 37 views
2

我正在从服务器传输数据并将其传递到数据生成模式的净流中。我成功地将H264和PCMU封装成可以通过NetStream播放,但是我需要能够从它所在的视频显示中捕获此输出并将其存储在图像中。当使用RTMP服务器时,我会配置它发送RtmpSampleAccess命令,使用true,true允许音频和视频访问。当使用RTMFP我会做同样的,send() a RtmpSampleAccess true,true从同行允许访问。有没有办法在数据生成模式下写入| RtmpSampleAccess命令到NetStream?

我相信我需要发送FLV脚本数据对象的标记来表示RtmpSampleAccess命令,但是我找不到任何有关该标记格式的信息。在猜测命名为对象参数

["|RtmpSampleAccess", true, true]; 
["|RtmpSampleAccess", [true, true]]; 

及各种尝试(虽然看协议的文档,我不知道有一种):我已经使用OSMF FLVTagScriptDataObject设置为以下组合的对象尝试。

有人可以帮助我在这里,将不胜感激。

+0

所以你能够制作音频和视频标签并附加它们来播放视频,好吗?您需要的只是如何绘制视频容器?试图用'appendBytes'方法显示'RtmpSampleAccess'的作用。 –

+0

是的,视频渲染到Video元素,但我想将它复制到BitmapData,并且不能,因为videoSampleAccess是false。在其他情况下,我会发送此“特殊”消息来启用该示例访问。 –

+0

试试我的答案。这是我知道绘制'appendBytes'视频没有错误的两种方法之一。事实上,它取消了所有的安全错误!让我知道它是否有效,因为它更短,更少限制(比可能的第二种选择)。 –

回答

1

如果您将Netstream放入数据生成模式,则需要添加第二个播放命令。第二个简单地播放“空白”,由于某种原因,这覆盖了安全错误。

ns.play(null); 
ns.play(""); //works to avoid all security errors 
ns.appendBytesAction(NetStreamAppendBytesAction.RESET_BEGIN); 

然后绘制只安装一个按钮来运行draw_VideoFrame功能单击时,或尝试实时的东西,如下面(使用enterFrame事件)绘图:

vid_Obj.addEventListener(Event.ENTER_FRAME, draw_VideoFrame); 

,然后创建一个功能像这个例子一样。

function draw_VideoFrame (e:Event) : void 
{ 
    vid_BMD.draw(vid_Obj); //draw into a BitMapData variable 
} 
+0

这对我有效,你的先生/女士是我的英雄! –

+0

如果您有时间,可能值得添加另一种方式,只为了将来读者的完整性。再次,谢谢你。 –

+0

很高兴工作。我将在稍后的编辑中添加其他方法。我更喜欢所示的方法,因为它可以消除所有安全错误(例如:您可以为视频声音添加“computeSprectrum”可视化效果,即使使用** [第二种方法],通常也不会允许(http://gamespoweredby.com/blog/2014/ 11/netstream-playnull-bitmapdata-workaround /)**,因为它只绘制像素)。 –

相关问题