使用Flash Media Server(FMS)錄制mp4格式的視頻


最近在做一個有關視頻直播和點播的項目,客戶的一個需求就是可以控制對直播流的錄制,直播的實現采用的是Adobe的Flash Media Server,具體方式就是:視頻采集端采集視頻並編碼->rtmp流輸出->FMS服務器->rtmp流廣播->客戶端播放器加載rtmp流->播放;直播流的錄制采用在FMS服務器上錄制的方式,而不是在視頻采集設備端進行錄制。

由於客戶要求進行可控錄制,所以不能采用那種在視頻流發送端就寫好參數如: nc.publish("livestream","record") 的方式,而是采用了Adobe提供的一個用於FMS的Application,叫做dvrcast,它的實現實際是寫了好多的FMS服務器端的as代碼(.asc格式的文件),通過調用FMS服務器端的Stream類的record方法來進行錄制,通常record方法會錄制為.flv文件,最近通過查看FMS自帶的一些開發文檔,終於搞清楚了如何將視頻流錄制為.mp4文件,具體方法如下:

 

假設 視頻采集端發過來的視頻流是livestream,如  nc.publish("livestream","live");//采用直播模式發送

在服務器端想對該視頻進行錄制,則使用如下代碼:

s=Stream.get("mp4:yourRecordName.mp4");//獲取一個Stream對象,注意參數,錄制mp4或f4v文件時,必須加前綴"mp4:",yourRecordName是你想保存的名字

if(s){

s.record("record");//開始錄制,"record"參數可選,表示如果存在yourRecordName.mp4文件,會進行覆蓋

s.play("livestream");//此句比較重要,如果不寫的話,你會發現所創建的.mp4文件體積不變,此句代碼相當於FMS服務器端接管了livestream流的publish工作,因為服務器端的play方法優先於視頻采集端的publish方法

}

 

如果想停止錄制,則代碼如下:

s=Stream.get("yourRecordName");//可以寫"mp4:yourRecordName.mp4",也可以只寫yourRecordName

if(s) s.record(false);//停止錄制

 

所錄制的視頻文件可以通過FMS服務器進行點播播放。

但悲催的是,我現在發現,錄制的mp4視頻文件不能用播放器打開,也就是說,用戶下載到本地后將無法使用播放器進行觀看,而只能在網上通過點播服務來觀看,不知道為什么,FMS錄制的mp4格式和平常的mp4格式不一樣嗎???   這還是個不小的問題啊,希望有做過這方面的同志能夠給與我幫助!  不勝感激!!!

QQ:2429200513


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM