利用FMS做在線視頻錄製

準備工具:

Flash Media Server..

Flash 8 && Flash 8 Player (-______-)

一個攝像頭,一個麥克.
打開FLASH,新建一個FLASH文檔.

CTRL + L調出庫..在庫的右上角有個三角,點一下.然後選擇"新建視頻元件";

命名爲:video

在主場景裏新建2個圖層,一個名字叫 video_record,另一個叫video_play;

將庫裏的視頻元件分別拖到這2個圖層中.起名字叫video_r和video_p.video_r是用來錄視頻的.video_p是用來放視頻的.

(下面起新建MC啊,或命名一類的我就不寫了.只做程序介紹.如果連MC命名都不知道的話相信也看不懂這教程.大家見諒!)

程序部分:

var server_uri:String = "rtmp://localhost/tensharp";
//FMS地址;

var videoName:String = "KeeRula";
//視頻名.

var my_nc:NetConnection = new NetConnection ();
//新建一個連接對象,用來連接FMS;

my_nc.connect (server_uri);
//連接FMS;

var my_ns:NetStream = new NetStream (my_nc);
//新建流,用來捕獲和播放視頻;

var my_cam:Camera = Camera.get ();
video_r.attachVideo (my_cam);
//獲得懾像頭,並將攝像頭獲取的視頻載入到video_r裏.

my_cam.setQuality (1024, 90);
//設置帶寬和質量;

var my_mic:Microphone = Microphone.get ();
//獲得MIC;

my_ns.attachVideo (my_cam);
my_ns.attachAudio (my_mic);
//將攝像頭圖象和MIC聲音裝載到流.

video_p._visible = false;
//將播放窗口設置爲不可見.

my_nc.onStatus = function (thisObj:Object)
{
//trace (thisObj.code);
if (thisObj.code == "NetConnection.Connect.Success")
{
RecordStop ("空閒中");
//執行錄製停止方法.並將狀態設置爲空閒
}
else
{
trace ("錯誤:服務器未啓動或URI輸入錯誤.");
}
}
//onStatus這裏是指服務器的連接狀態.

function Record ()
{
video_r._visible = true;
//將錄製窗口設爲可見.
video_p._visible = false;
//播放窗口設置爲不可見.
my_ns.publish (videoName, "record");
//關鍵就在這句了.寫了這麼多全圍繞它來的.record爲錄製.
StreamInfo ("NowRecord");
//執行StreamInfo方法,並將參數設置爲NowRecord;
btn_pr.btn_text.text = "停止";
//按鈕文字:停止.
RecordInterval = setInterval (RecordTime, 1000);
//統計錄製時間.
}
//方法:錄製.

var timeNum:Number = 0;
//錄製時間.

function RecordTime ()
{
timeNum ++;
txt_status.text = "正在錄製" + " " + "時間:" + Math.floor (timeNum / 60) + "分" + (timeNum % 60) + "秒";
}
//方法:錄製時間統計.

function RecordStop (__status:String)
{
//__status是當前狀態文字.
txt_status.text = "當前狀態:" + __status;
btn_pr.btn_text.text = "錄製";
StreamInfo ("NowStop");
//執行StreamInfo方法..並將參數設置爲NowStop;
clearInterval (RecordInterval);
timeNum = 0;
//不錄了..要把統計時間清空.
if (__status == "錄製完成")
{
Finished ();
}
//這個應該不用偶說了..
}
//方法:空閒或錄製完成.

function Finished ()
{
my_ns.close();
//完成了..就要關閉錄製.
var thisObj = this;
var FinishAlert:MovieClip = _root.attachMovie ("Alert", "FinishAlert", 100);
//這個是一個彈出框.具體看庫裏的MC:Alert.
with (FinishAlert)
{
alertTitle.html = true;
alertTitle.htmlText = "" + "錄製完成!" + "";
info.text = "錄製完成..請選擇下一步操作."
_x = video_r._x + (video_r._width - _width) / 2;
_y = video_r._y + (video_r._height - _height) / 2;
btn_sub.btn_txt.text = "播放";
btn_cln.btn_txt.text = "重錄";
btn_sub.onRelease = function ()
{
thisObj.PlayVideo ();
thisObj.closeAlert (FinishAlert);
}
btn_cln.onRelease = function ()
{
thisObj.Record ();
thisObj.closeAlert (FinishAlert);
}
closed.onRelease = function ()
{
thisObj.closeAlert (FinishAlert);
}
}
btn_pr.enabled = false;
//把按鈕設爲不可點.
}
//方法:錄製完成.

function closeAlert (__alert:MovieClip)
{
btn_pr.enabled = true;
unloadMovie (__alert);
}
//關閉那個Alert用的.

function StreamInfo (__status:String)
{
btn_pr.onRelease = function ()
{
if (__status == "NowRecord")
{
RecordStop ("錄製完成");
}
else if (__status == "NowStop")
{
Record ();
}
else if (__status == "NowPlay")
{
Record ();
}
}
}
//嘿嘿..如果把上面的仔細看了的話這個就不用我說了吧.

function PlayVideo ()
{
txt_status.text = "當前狀態:" + "正在播放...";
StreamInfo ("NowPlay")
video_r._visible = false;
video_p._visible = true;
video_p.attachVideo (my_ns);
//將視頻載到播放窗口中.
my_ns.play (videoName);
//開始播放.
btn_pr.btn_text.text = "重錄";
my_ns.onStatus = function (PlayInfo)
{
if (PlayInfo.code == "NetStream.Play.Stop")
{
my_ns.seek (0);
my_ns.pause();
txt_status.text = "當前狀態:" + "播放完成...";
}
}
//流狀態信息...詳細的請自己 trace (PlayInfo.code);
}
//方法:播放視頻.
//需要注意的是用FMS播放的時候不用寫路徑.因爲FMS錄的視頻直接存在FMS默認的流文件目錄裏了.
//錄的視頻的存放路徑:FMS安裝目錄:/application/站點/streams/_definst_

如果上面看個差不多了可以自己動手做一下了.祝大家好運 (By:KeeRula)(:
發佈了8 篇原創文章 · 獲贊 0 · 訪問量 2422
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章