使用Flex进行网络摄像头录制是否严格要求媒体服务器(FMS,Red5,Wowza等)?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Flex进行网络摄像头录制是否严格要求媒体服务器(FMS,Red5,Wowza等)?相关的知识,希望对你有一定的参考价值。

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

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

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

是否有某个教程显示如何执行此操作?我在弹性开发方面真的很陌生,并且希望有一步一步的程序:P

答案

有机会:)

haxevideo是在Haxe开发的FMS / Red5服务器。与那些不同的是非常轻量级,它不需要任何类型的安装。

所以你可以做的是将它与你的应用程序一起重新分发,这样你就可以将音频和视频本地录制到FLV文件中。

不确定你还记得Screenweaver,但是最新版本是使用Haxe开发的,它叫做SWHX。在SWHX之上,您真正构建了一个名为HippoHX的包装器,HippoHX为您完成了所有设置。如果您下载它,那么有一个样本可以完全满足您的需要(记录到本地文件)。

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

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

什么让我知道,

干杯!

Juan

另一答案

你对这个运气不好。你需要某种流媒体服务器。 Flex无法将视频录制到用户本地驱动器或任何驱动器。

另一答案

要将FLV编码为ByteArray,请首先实例化ByteArrayFlvEncoder。其余部分与上一版本类似,但您现在可以在更新元数据中的duration属性时调用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/

以上是关于使用Flex进行网络摄像头录制是否严格要求媒体服务器(FMS,Red5,Wowza等)?的主要内容,如果未能解决你的问题,请参考以下文章

用PyQt5进行视频录制

网络录制的视频未在 ipad 中播放

海康大华安防网络摄像头OnvifRTSP视频流媒体服务解决方案EasyNVR如何针对运营商方案进行异网卡顿问题处理

如何使用 webRTC 和基于服务器的对等连接录制网络摄像头和音频

流媒体开发9ffmpeg实现视频录制

流媒体开发9ffmpeg实现视频录制