【问题标题】:Does webcam recording with Flex strictly requires a media server (FMS, Red5, Wowza,etc.)?使用 Flex 进行网络摄像头录制是否严格要求媒体服务器(FMS、Red5、Wowza 等)?
【发布时间】:2009-06-13 00:21:33
【问题描述】:

我正在尝试实现一个 flex 应用程序,该应用程序能够从网络摄像头录制视频,然后将其上传到服务器。

我只找到需要运行 Red5、Flash Media Server 和 Wowza 等媒体服务器以及到服务器的开放 rtmp 流的教程和示例。

但是,我想知道是否可以在本地录制视频,然后通过简单的 HTTP 请求将其提交到服务器。

在某处有说明如何执行此操作的教程吗?我真的是 flex 开发的新手,很想有一个循序渐进的过程:P

【问题讨论】:

    标签: apache-flex video webcam video-capture flash-media-server


    【解决方案1】:

    有机会:)

    haxevideo 是在Haxe 中开发的 FMS/Red5 类型的服务器。与它们的不同之处在于它非常轻巧,不需要任何安装。

    因此,您可以将其与您的应用一起重新分发,这样您就可以在本地将音频和视频录制到 FLV 文件中。

    不确定您是否记得 Screenweaver,但最新版本是使用 Haxe 开发的,名为 SWHX。在 SWHX 之上,您真正构建了一个名为 HippoHX 的包装器,HippoHX 为您完成所有设置。如果您下载它,就会有一个完全符合您需要的示例(记录到本地文件)。

    一旦你记录了文件,剩下的就是上传到服务器了,但这没什么大不了的。

    试一试,如果您发现任何问题,请给我发电子邮件或加入(相当)邮件列表寻求帮助。

    有什么要告诉我的,

    干杯!

    胡安

    【讨论】:

      【解决方案2】:

      你运气不好。您将需要某种流媒体服务器。 Flex 不具备将视频录制到用户本地驱动器或任何驱动器的功能。

      【讨论】:

        【解决方案3】:

        要将 FLV 编码为 ByteArray,首先要实例化 ByteArrayFlvEncoder。其余部分与上一个版本类似,但您现在可以在更新元数据中的持续时间属性后调用 updateDurationMetadata()。最后,调用 kill() 为垃圾回收准备对象: ?

        var baFlvEncoder:ByteArrayFlvEncoder = new ByteArrayFlvEncoder(myFrameRate);
        
        baFlvEncoder.setVideoProperties(myWidth, myHeight, VideoPayloadMakerAlchemy);
        // (Omit the 3rd argument to NOT use Alchemy if you're targeting Flash 9)
        baFlvEncoder.setAudioProperties(BaseFlvEncoder.SAMPLERATE_44KHZ, true, false, true);
        
        baFlvEncoder.start();
        
        baFlvEncoder.addFrame(myBitmapData, myAudioByteArray);
        baFlvEncoder.addFrame(myBitmapData, myAudioByteArray); // etc.
        
        baFlvEncoder.updateDurationMetadata();
        
        saveOutMyFileUsingFileReference( baFlvEncoder.byteArray );
        
        baFlvEncoder.kill(); // for garbage collection
        

        要将 FLV 直接编码为本地文件(在 AIR 中),请使用 File 引用实例化 FileStreamFlvEncoder,然后打开公开的 FileStream,然后在完成后将其关闭:?

        var myFile:File = File.documentsDirectory.resolvePath("video.flv");
        var fsFlvEncoder:FileStreamFlvEncoder = new FileStreamFlvEncoder(myFile, myFrameRate);
        fsFlvEncoder.fileStream.openAsync(myFile, FileMode.UPDATE);
        
        fsFlvEncoder.setVideoProperties(myWidth, myHeight, VideoPayloadMakerAlchemy);
        fsFlvEncoder.setAudioProperties(BaseFlvEncoder.SAMPLERATE_44KHZ, true, false, true);
        
        fsFlvEncoder.start();
        
        fsFlvEncoder.addFrame(myBitmapData, myAudioByteArray);
        fsFlvEncoder.addFrame(myBitmapData, myAudioByteArray); // etc.
        
        fsFlvEncoder.updateDurationMetadata();
        
        fsFlvEncoder.fileStream.close();
        
        fsFlvEncoder.kill();
        

        欲了解更多详情,请使用以下参考链接:

        http://www.zeropointnine.com/blog/updated-flv-encoder-alchem/

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-09-10
          • 1970-01-01
          • 1970-01-01
          • 2012-05-25
          • 1970-01-01
          • 2012-03-18
          • 1970-01-01
          相关资源
          最近更新 更多