1. 程式人生 > >解決fms錄製時沒有生成flv的問題

解決fms錄製時沒有生成flv的問題

這個問題已經困擾很長時間了,google或baidu也沒什麼結果。

先把問題講一下吧,按照一些簡單的例子寫client-script錄製麥克風(網上很多的),常規配置fms,也不需要寫server-script,一切都很簡單,但是錄製完畢根本沒有生成flv,bandwidth上面沒有波動。trace下info.code先後得到NetConnection.Connect.Success和NetStream.Publish.Start。

呵呵,乍看下這樣的輸出挺正常的。但是就是沒有record。問了很多次,終於在adobe fms online forum上有了點結果,還是從camera上得到的啟發,順便說下,我試camera時也不能錄。

thread見[url]http://www.adobe.com/cfusion/webforums/forum/messageview.cfm?forumid=15&catid=578&threadid=1296576&enterthread=y[/url]

基本的意思是:[color=red]你電腦上沒有camera,所以沒有影象錄進去。[/color]:-)原來我一直以為沒有攝像頭也會有影象過去的(黑色的影象)。其實這是fms的一種優化方案,當影象沒有變化的時候(沒有camera也就是說沒有影象變化啦),fms為了節約bandwidth就忽略了,可以用motionlevel來調節這個度。

同樣的,對於microphone來說也應該調節slienceLevel來決定fms忽略輸入的度。這裡有一段程式碼:
[code]
import flash.net.*;
import flash.events.*;
import flash.media.*;
stop();

NetConnection.defaultObjectEncoding = ObjectEncoding.AMF0;
var nc:NetConnection = new NetConnection();
var ns:NetStream;
var mic:Microphone = Microphone.getMicrophone();
mic.rate = 11;
mic.setSilenceLevel(0)
function ncHandler(eve:NetStatusEvent):void
{
trace(eve.info.code);
if(eve.info.code == "NetConnection.Connect.Success")
{
ns = new NetStream(nc);
ns.addEventListener(NetStatusEvent.NET_STATUS, nsHandler);
ns.attachAudio(mic);
ns.publish("blackcamera", "record");
trace(mic.silenceLevel)
}
}

function nsHandler(eve:NetStatusEvent):void
{
trace(eve.info.code)
}


nc.addEventListener(NetStatusEvent.NET_STATUS, ncHandler);
nc.connect("rtmp://localhost/myApplication");
[/code]
注意這句mic.setSilenceLevel(0),它的作用就是取消這種優化,任何微小的輸入都會被fms接受,缺點就是包括噪音。一般來說它還跟你的聲音大小相關,如果你吼的聲音太小了,就不會有聲音輸入(它根據這個度認為這是silence) :D 。調高點這個值也是可以的,只是只有等到你吼的聲音足夠大時(超過這個度),fms才會開始錄,這時會多一個trace值:NetStream.Record.Start。