3

我正在开发的 Flash 应用程序的功能之一是能够将网络摄像头传输给其他人。我们只是在 Flash 中使用内置的网络摄像头支持并通过 FMS 发送它。

我们已经有人要求更高质量的视频,但我们已经在 Flash 中使用了最高质量设置(将质量设置为 100%)。

我的理解是,在较新的 Flash 播放器中,他们为视频添加了对 MPEG-4 编码的支持。我创建了一个简单的测试 Flex 应用程序来尝试比较 MP4 与 FLV 编码的视频质量。但是,我似乎根本无法让 MP4 工作。

根据Flex 文档,要使用 MP4 而不是 FLV,我唯一需要做的就是在调用发布时将“mp4:”添加到流的名称中:

将流名称指定为前缀为 mp4: 的字符串,带或不带文件扩展名。前缀向服务器表明该文件包含 MPEG-4 Part 14 容器格式中的 H.264 编码视频和 AAC 编码音频。

当我尝试这个时,没有任何反应。我没有在客户端引发任何事件,没有抛出异常,并且我在服务器端的日志记录没有显示任何流开始。

以下是相关代码:

// These are all defined and created within the class.
private var nc:NetConnection;
private var sharing:Boolean;
private var pubStream:NetStream;
private var format:String;
private var streamName:String;
private var camera:Camera;

// called when the user clicks the start button
private function startSharing():void {
  if (!nc.connected) {
    return;
  }

  if (sharing) { return; }

  if(pubStream == null) {
    pubStream = new NetStream(nc);
    pubStream.attachCamera(camera);
  }
  startPublish();

  sharing = true;
}

private function startPublish():void {
  var name:String;

  if (this.format == "mp4") {
    name = "mp4:" + streamName;
  } else {
    name = streamName;
  }

  //pubStream.publish(name, "live");
  pubStream.publish(name, "record");
}
4

3 回答 3

1

了解您正在运行的 FMS 版本会有所帮助吗?看来您至少需要 FMS 3.0.2。

于 2009-02-25T00:29:04.423 回答
1

您确定这适用于实时流,而不仅适用于录制吗?这1 2 个链接表明,虽然播放器可以解码sorenson、vp6 和 h264,但它只能在sorenson中编码。

我也有类似的情况,所以我想澄清一下。

编辑:实际上让我怀疑的是文档说flv和mp4,它们不是编解码器而是容器,实时流不使用容器,编码帧直接在rtmp数据包中传播

于 2009-05-17T22:18:56.000 回答
1

Flash Player 不使用 H.264 进行编码,但 Flash Media Server 可以在 F4V 容器中录制任何编解码器。Flash Media Live Encoder 可以使用 H.264 进行编码。

所以基本上你不能从网络 Flash 播放器发送 h264(但是?)......

于 2010-11-25T10:59:44.550 回答