年前的时候曾经研究过flv播放器方面的技术,
并且在高人的帮助下解决了关键的一些技术问题.
以至于我这个对Flash一窍不通的人也看明白了一些…
最近对FMS(Flash Media Server)颇感兴趣。
于是,寻找了一些资料后自己开始做在线录制尝试。
现已把所有的AS写完,放出来共享一下.
我用的软件环境是Winxp+FMS破解无限制版+Flash8
直接编译发布即可,需要修改的就是FMS服务器的地址和建立相关的路径.
功能比较简陋,但也满足现有的需求了…
应用的在线录制的时候只需传递进去一个关联当前用户的文件名变量,
然后录制完成后由web程序去处理其他的事情就可以了.
附这个程序的AS源码:
//开始初始化
var timeNum:Number = 0;
//初始化时间计数;
var server_url:String = “rtmp://192.168.0.13/vhost/”;
//FMS地址;
var videoname:String = “vtest”;
//保存的文件名;
var pig_nc:NetConnection = new NetConnection();
//新建一个连接对象,用来连接FMS;
pig_nc.connect(server_url);
//连接FMS;
var pig_ns:NetStream = new NetStream(pig_nc);
//新建流,用来捕获和播放视频;
var pig_cam:Camera = Camera.get();
//获取摄像头rec_cam;
var pig_mic:Microphone = Microphone.get();
//获取麦克风声音;
waiting();
//UI初始等待状态;
//——————-事件发生———————//
rec_con.onRelease = function() {
//录制按钮被点击;
if (recstar._currentframe == 1) {
recstar.gotoAndStop(2);
recplay();
} else if (recstar._currentframe == 2) {
recstar.gotoAndStop(1);
recstop();
} else if (recstar._currentframe == 3) {
recstar.gotoAndStop(1);
waiting();
} else {
trace(“出错!”);
}
};
view_con.onRelease = function() {
//预览按钮被点击;
if (view._currentframe == 1) {
view.gotoAndStop(2);
viewstar();
} else if (view._currentframe == 2) {
view.gotoAndStop(1);
viewstop();
} else {
trace(“出错!”);
}
};
submit_con.onRelease = function() {
//完成按钮被点击;
submitstar();
};
//——————-控制函数———————//
function waiting() {
//初始等待状态;
view.gotoAndStop(3);
view_con._visible = false;
//设置预览不可用;
submit.gotoAndStop(2);
submit_con._visible = false;
//设置提交不可用;
statebox.htmlText = “等待中…”;
//更新状态信息;
pig_cam.setQuality(0, 80);
//设置带宽和质量;
pig_ns.attachVideo(pig_cam);
pig_ns.attachAudio(pig_mic);
//将声音和图像装载到流;
recbox.attachVideo(pig_cam);
//将摄像头视频装载到recbox(视频录制预览窗口);
}
function rec_time() {
//时间计数;
timeNum++;
statebox.text = statemsg+”时间:”+Math.floor(timeNum/60)+”分”+(timeNum%60)+”秒”;
}
function recplay() {
//录制开始;
pig_ns.publish(videoname, “record”);
//开始录制;
statebox.textColor = 0xFF0000;
statebox.text = “设备准备中…”;
statemsg = “正在录制,”;
RecordInterval = setInterval(rec_time, 1000);
}
function recstop() {
//录制停止;
recstar.gotoAndStop(4);
rec_con._visible = false;
view.gotoAndStop(1);
view_con._visible = true;
statebox.htmlText = “录制完成,请点击预览按钮回放.”;
statebox.textColor = 0x006600;
//更新状态信息;
clearInterval(RecordInterval);
timeNum = 0;
pig_ns.close();
recbox.clear();
isplay = true;
}
function viewstar() {
//预览开始;
if (isplay == true) {
view_ns = new NetStream(pig_nc);
recbox.attachVideo(view_ns);
view_ns.play(videoname);
isplay = false;
statebox.text = “正在回放,时间:0分0秒”;
} else {
view_ns.pause();
}
//开始回放;
view_ns.onStatus = function(PlayInfo) {
if (PlayInfo.code == “NetStream.Play.Stop”) {
view_ns.onStatus = function(PlayInfo) {
if (PlayInfo.code == “NetStream.Buffer.Empty”) {
viewend();
}
};
}
};
//视频回放状态
recstar.gotoAndStop(3);
rec_con._visible = true;
submit.gotoAndStop(1);
submit_con._visible = true;
statemsg = “正在回放,”;
ReviewInterval = setInterval(rec_time, 1000);
//statebox.htmlText = “正在回放,您可以重新录制或者完成.”;
statebox.textColor = 0x336699;
//更新状态信息;
}
function viewstop() {
//预览暂停;
//更新状态信息;
statebox.htmlText = “回放暂停,点击预览继续播放.”;
statebox.textColor = 0x336699;
view_ns.pause();
clearInterval(ReviewInterval);
}
function viewend() {
//视频播放结束
clearInterval(ReviewInterval);
timeNum = 0;
statebox.htmlText = “回放结束,您可以重新录制或者完成”;
view.gotoAndStop(1);
isplay = true;
}
function submitstar() {
//完成提交;
recstar.gotoAndStop(4);
rec_con._visible = false;
view.gotoAndStop(1);
view_con._visible = true;
isplay = true;
submit.gotoAndStop(2);
submit_con._visible = false;
statebox.htmlText = “完成,请填写视频相关资料然后发布.”;
statebox.textColor = 0x006600;
//更新状态信息;
}
评论