使用 Red5 媒体服务器和 oflaDemo 应用程序提高录制视频的质量

Posted

技术标签:

【中文标题】使用 Red5 媒体服务器和 oflaDemo 应用程序提高录制视频的质量【英文标题】:improve quality of recorded video using Red5 media server and oflaDemo app 【发布时间】:2012-01-21 07:13:50 【问题描述】:

我现在要做的是:

cam = Camera.getCamera();   // Get default camera. 
mic = Microphone.getMicrophone();   // Get the microphone
cam.setMode(800, 600, 25);
cam.setQuality(0,90);
videoDisplay.attachCamera(cam);

当用户点击按钮进行录制时,我会执行以下操作:

private function netStatusHandler(e:NetStatusEvent):void      
            var code:String = e.info.code;              

            Alert.show("code = " + code);   
            if(code == "NetConnection.Connect.Success")  //in case of recording...

                ns = new NetStream(nc); 
                ns.attachCamera(cam);
                ns.attachAudio(mic);

                ns.publish( "file1", "record" );

                
            else    
                trace(code);   
              
        

        private function start_rec():void
            nc = new NetConnection();
            nc.connect("rtmp://localhost/oflaDemo");
            nc.addEventListener(NetStatusEvent.NET_STATUS,netStatusHandler);
        

但是录制的质量很糟糕...我按照与上面相同的代码播放视频而不是 ns.publish 我执行 ns.play() 并且显示的视频与预期的不一样,尽管当我 ns 时。 play() 用作 red5 样本的现成 flv 视频,它们播放完美..我录制的方式有问题吗?用相机?怎么了?有什么想法吗??

播放视频的代码是:

                     var nsClient:Object = ;
            nsClient.onMetaData = ns_onMetaData;

            nc = new NetConnection();
            nc.connect(null);
            ns = new NetStream(nc);
            ns.client = nsClient;

            video = new Video(myVid.width,myVid.height);
            video.attachNetStream(ns);
            video.smoothing=true;
            myVid.addChild(video);

            ns.play("http://localhost:5080/oflaDemo/recordings/file1.flv");`

提前致谢!

【问题讨论】:

【参考方案1】:
camera = Camera.getCamera();
mic = Microphone.getMicrophone();
mic.setLoopBack(false); 
mic.setUseEchoSuppression(true);
camera.setMode(640,480,30);
camera.setQuality(65536,90);

camera.setQuality(65536,90); 中,您可以做到 100 以获得最佳质量,但这是您的选择。希望通过这些更改,您的质量将大大提高。此外,质量也取决于您的网络摄像头。

【讨论】:

好的,当我在录制时看到它时视频是完美的,但是当它被存储并且我尝试播放它时,它很糟糕!我不知道我做错了什么......起初它不播放我录制的所有视频,但其中的一小部分,并且像机器人一样移动而不是物理上录制...请参阅上面的编辑以查看我如何播放视频... 我正在使用具有上述设置的两个不同的网络摄像头。结果取决于网络摄像头。 只需将 setQuality 增加到 (65536,100) 并购买一个好的网络摄像头。更多我不知道 也在 camera.setMode(640,480,30) .. 这里 640 x 480 是像素定义增加它们以获得更好的像素分辨率,30 是每秒帧速率.. 15 是实时流媒体的默认值.但主要取决于您的网络摄像头和像素分辨率。 感谢您的回答,但问题是,尽管我在通过 red5 录制时看到一个非常好的视频,但录制的视频与我在显示时看到的不同,这是怎么回事? 【参考方案2】:

问题可能出在带宽上。尝试安装带宽限制器,然后尝试录制。你会有一个非常糟糕的回报。 如果您有高速连接,那么一切都会好起来的。 如果您使用的是 RTMP 协议,那么这意味着一切都应该是实时的。因此,如果带宽低,帧将被丢弃。

【讨论】:

以上是关于使用 Red5 媒体服务器和 oflaDemo 应用程序提高录制视频的质量的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 RED5 闪存服务器为 MP3 提供服务

如何将音频从 android 麦克风发布到 Red5 服务器应用程序?

基于 Red5 的流媒体服务器的搭建和应用

什么是red5

Red5点播和直播的实现

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