【问题标题】:How can you toggle H264 on and off in a NetStream?如何在 NetStream 中打开和关闭 H264?
【发布时间】:2012-10-22 20:04:30
【问题描述】:

取以下代码:

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,而 Adob​​e 显然跳过了这个小细节。我知道如何在应用程序的整个执行过程中有效地控制 NetStream 是使用 H264 还是“默认”,但我希望能够继续单击一个按钮以使其来回切换,而无需更换 NetStream 或做任何事情否则会像那样疯狂。

这是如何正确完成的?谢谢!

【问题讨论】:

  • “有效”是什么意思?你目前的障碍是什么?我想在播放视频时“即时”切换这样的设置,你需要一个流媒体服务器,比如 Flash Media Server [或者他们现在称之为的任何东西]
  • 我们有 FMS,虽然我们也希望能够为点对点 RTMFP 做到这一点。

标签: actionscript-3 flash apache-flex h.264 netstream


【解决方案1】:

阅读您的问题,您的提问似乎有几个问题,再加上一点澄清会有所帮助,所以我会做出一些假设来尝试回答:

问题 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 或做任何其他疯狂的事情 像这样。

我建议使用重新连接例程来切换您的设置以取消发布现有流并重新连接相机并发布具有不同视频设置的新流。这将保持流的完整性,老实说,取消发布和重新发布流并不是你说的那么疯狂

如果您必须沿着切换设置的路线走,那么我上面关于您声明为 default 的假设将阻止更改已发布流上的文件格式。

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

这完全未经测试,但您可以创建相机实例,应用您的 videoStreamSettings,将相机附加到您的流实例,然后发布。虽然它正在发布以切换设置,但您可以将相机实例从网络流中分离出来:

stream.attachCamera(null);

然后只需创建一个新的相机实例,应用新的 videoStreamSettings,最后将其附加到已发布的流中。

我通常在收到状态事件 "NetStream.Publish.Start" 时发送元数据。每次将相机重新连接到流时,您都必须修改并重新发送,只要流正在发布。我不知道这会产生什么影响,但是您连接的播放器应该会收到有关元数据更改的回调。

【讨论】:

    猜你喜欢
    • 2019-09-04
    • 1970-01-01
    • 2020-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-09
    • 2011-09-19
    相关资源
    最近更新 更多