使用MP4编码在Flash中流式传输网络摄像头视频

时间:2009-02-24 19:54:57

标签: flex actionscript-3 video mp4

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

我们有一些人要求提供更高质量的视频,但我们已经在Flash中使用了最高质量的设置(设置质量达到100%)。

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

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

  

将流名称指定为字符串   使用前缀mp4:有或没有   文件扩展名。前缀   向服务器指示该文件   包含H.264编码的视频和   MPEG-4中的AAC编码音频   第14部分容器格式。

当我尝试时,没有任何反应。我没有在客户端获得任何事件,没有抛出异常,并且我在服务器端的日志记录没有显示任何流启动。

以下是相关代码:

// 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");
}

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

您确定这适用于直播流而不仅仅适用于录制吗?这个1 2链接表明,虽然玩家可以解码 sorenson,vp6和h264,但它只能编码为 sorenson

我处于类似的情况,所以我想澄清一下。

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

答案 2 :(得分:1)

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

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