用FLASH COM+asp.net技術實現線上視訊交談
網路視訊交談 交流目前很是熱門
但用WEB視頻就不是那麼簡單了
以前有兩種方式可以實現 一個是用客服ACTIVE控制項 二是用JAVA APP但兩種都不很理想
一個是網路訊號採集不能自適應頻寬,二是技術上的難題 現在流行的BCHAT(碧聊用的)就是採用第一種方式,但我還是不能把控制項給分離出來,網上了也沒有 免費 或者商業的現成控制項賣 第二個方式我就不說了,因為WIN XP以上不支援JAVA所以免談
但是現Macromedia推出的新技術Flash Communication Server MX確很方便實現了,關於這個方面的介紹大家可以去網上找
下載測試版後有幾個現成的例子,在這說說怎麼利用ASPX和FLASH通訊實現兩個ID的交流
這裡發一下成品的圖片
這是我是asp.net+SQL寫的仿QQ的線上通訊系統
功能還不錯 QQ的功能在這都有了
最讓我得意是終於實現了視頻的功能
FLASH的視頻功能是b-s-b模式 也就是在服務段會有個零時視頻檔案
具體代碼就打包讓下載好了
這個寫點重點
SP.aspX
<%@Language="C#"%>
<script runat="server">
private void Page_Load(object sender, System.EventArgs e)
{
Response.Write("conn=1&Sendid="+Session["nmd"]+"&Recvid="+Session["Recvid"]);
}
</script>
Cam.aspx
<%@ Page Language="C#" %>
<script runat="server">
private void Page_Load(object sender, System.EventArgs e)
{
Session["RecvId"]=Request.QueryString["RecvId"];
}
</script>
<html>
<head>
<meta http-equiv="Content-Language" content="zh-cn">
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>無標題文檔</title>
</head>
<body leftmargin="0" topmargin="0" marginwidth="0" marginheight="0">
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,29,0" width="220" height="200">
<param name="movie" value="SP.swf">
<param name="quality" value="high">
<embed src="SP.swf" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="220" height="200"></embed></object>
</body>
</html>
SP.swf的角本
stop();
client_nc = new NetConnection();
//NetConnection.onStatus(para)用來監測server返回的資訊
//當server返回的資訊時,此處理器被觸發
//參數是一個包含著返回資訊的對象,包含著兩個固定變數level和code,該參數名稱可隨便命名
client_nc.onStatus = function(info) {
// 利用trace功能將server返回的資訊可視化
trace("Level: "+info.level+newline+"Code: "+info.code);
};
// 串連到server上,建立rtmp串連
//下面寫的是相對位址,原因是我的web server和flash communication server在一台機器上
//如果你的web server和flash communication server不在一台機器上,只要滿足兩台機器的ip在一個域
//你就可以同樣成功建立串連,可以寫成client_nc.connect("rtmp:/192.168.0.1/record_video");
//record_video是檔案夾的名字,該檔案夾必須事先存在
//假設你是按照預設安裝的communication server,那麼record_video檔案夾就應該放在
//C:/Program Files/Macromedia/Flash Communication Server MX/flashcom/applications目錄下面
client_nc.connect("rtmp://192.168.0.2/record_video");
// 使用SharedObject.getRemote方法,建立遠程SharedObject
//"myvideo"是SharedObject檔案名稱,對應在server硬碟上的檔案是myvideo.fso
// client_nc.uri是一個必要的參數,指向當前rtmp的串連
// 第三個是選擇性參數,true代表將myvideo.fso寫入硬碟,false、null或者省略代表不寫入,只作臨時存在
rec_so = SharedObject.getRemote("myvideo", client_nc.uri, true);
//sharedobject.onSync(para)用來動態監測sharedobject的變化情況
//每當sharedobject發生變化時,此處理器被觸發
//參數是一個數組,記錄sharedobject.data中發生變化的內容,該參數名稱可隨便命名
//該數組的每個成員都是一個對象,對象又有兩個成員code和name
//name代表的是發生變化的sharedobject.data裡面的發生變化的內容
//code代表的是這個內容發生了什麼變化,是系統返回資訊
// 將sharedobject功能串連到server上
rec_so.connect(client_nc);
var Recvid;
var Sendid;
GetId();
function Recv() {
//建立新的NetStream流對象,將會用來播放留言資訊
in_ns = new NetStream(client_nc);
//通過NetStream.play方法播放server上的flv檔案
in_ns.play(Recvid);
mybox.attachVideo(in_ns);
}
function Send() {
this.cam = Camera.get();
this.mic = Microphone.get();
// 在client_nc串連上,建立NetStream對象
out_ns = new NetStream(client_nc);
// 通過NetStream.attachVideo方法獲得網路攝影機的映像
out_ns.attachVideo(this.cam);
// 通過NetStream.attachAudio方法獲得麥克風的聲音
out_ns.attachAudio(this.mic);
out_ns.publish(Sendid, "live");
}
function GetId(){
//構造一個新的LoadVars對象
myload = new LoadVars();
//設定myload的動作,以便伺服器驗證
myload.action = "post";
//驗證和伺服器串連的函數
myload.onLoad = function(success) {
//如果和伺服器成功串連則…
if (success) {
//如果驗證動作成功則…
if (this.conn == "1") {
//將返回對象中的output變數賦值給情境中var為output的Dynamic Text框
_root.Recvid = this.Recvid;
_root.Sendid = this.Sendid;
Send();
Recv();
}
} else {
//如果和伺服器串連不成功則返回失敗訊息,需要檢查路徑是否正確
}
};
myload.sendAndLoad("http://localhost/WEBQQ/SP.aspx", myload, "post");
}