采取以下代码:

m_h264Settings = new H264VideoStreamSettings();
<some configuration in between>
m_ns.videoStreamSettings = m_h264Settings;


切换m_ns的videoStreamSettings是否仍在使用H264的一种体面方法是什么?

我尝试在NetStreams的主要文档(http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/net/NetStream.html)中查找属性videoStreamSettings,而Adobe显然跳过了这个小细节。我知道如何在应用程序的整个执行过程中有效地控制NetStream是使用H264还是“默认”,但是我希望能够一直单击按钮以使其来回切换,而无需更换NetStream或执行任何操作否则那样疯狂。

如何正确完成?谢谢!

最佳答案

阅读您的问题,似乎您有几个问题再加上一些澄清将是有帮助的,因此我将做一些假设尝试并回答:

问题1:


切换m_ns的videoStreamSettings是否是一种不错的方法
还在使用H264吗?


默认情况下,您是说使用On2 VP6视频编解码器,并因此发布为FLV格式而不是F4V吗?

我假设您的查询与正在播放已发布流的正在连接的应用程序有关?显然,您可以使用变量来跟踪在录制应用程序本身中应用于流的哪些设置。

我将假设您有一个单独的应用程序正在摄取已发布的流,而您只是尝试确定该流是使用H264而不是On2 VP6发布的。首先,文件类型会有所不同,一个是FLV,一个是F4V。其次,您可以在发布时利用将元数据分配给流的优势:

protected function sendMetadata():void {
    var metaData:Object = new Object();
    metaData.codec = stream.videoStreamSettings.codec;
    metaData.profile = m_h264Settings.profile;
    metaData.level = m_h264Settings.level;
    metaData.hasMetadata = true;
    stream.send("@setDataFrame", "onMetaData", metaData);
}


然后,在您的播放应用程序中,您可以使用onMetaData()回调来获取您所需的信息:

public function onMetaData(infoObject:Object):void {}


问题2:


我希望能够继续单击按钮以使其切换回
无需更换NetStream或进行其他疯狂操作
像那样。


在切换设置时,建议重新连接例程以取消发布现有流,然后重新连接摄像机并使用其他视频设置发布新流。这将保持流的完整性,并且说实话,取消发布和重新发布流并不像您所说的那样疯狂。

如果您必须遵循切换设置的路线,那么上面关于您声明为默认设置的假设将防止更改已经发布的流上的文件格式。

我个人不会使用相同的编解码器并应用不同的编解码器
H264VideoStreamSettings流的中间发布。仅在将摄像机添加到流中时验证H264VideoStreamSettings,并在压缩开始后将其应用。据我了解,压缩是从流的发布开始的,因此请按照您的建议进行切换,以解决已经发布的流上的压缩问题。由此产生的结果会导致我的意见过多波动,我很难理解为什么这样做是必要的。但是,我可能会被纠正,或者可能是出于测试目的。

这是完全未经测试的,但是您可以创建摄像机实例,应用videoStreamSettings,将摄像机附加到流实例,然后发布。在发布切换设置的同时,您可以将摄像机实例与网络流分离:

stream.attachCamera(null);


然后,只需创建摄像机的新实例,应用新的videoStreamSettings并将其最终附加到已发布的流上即可。

我通常会在收到状态事件“ NetStream.Publish.Start”时发送元数据。只要发布流,您就必须修改此设置并在每次将摄像机重新连接到流时重新发送。我不知道这会带来什么影响,但是您所连接的播放器应有望收到有关元数据更改的回调。

07-28 12:03