阅读您的问题,您的问题似乎有几个问题加上更多的澄清会有所帮助,因此我将做出一些假设来尝试回答:
问题一:
切换 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”时发送元数据。每次将相机重新连接到流时,您都必须修改并重新发送,只要流正在发布。我不知道这会产生什么影响,但是您连接的播放器应该会收到有关元数据更改的回调。