找回密码
 注册
搜索
查看: 4595|回复: 0

据说是Flash的视频聊天代码

[复制链接]
发表于 2010-2-23 19:15:52 | 显示全部楼层 |阅读模式
只是把以前做的单个的功能整合了一下,本来还想弄个FMS的视频聊天,不过虚拟空间没办法..
" n7 ^& F" Y: g" Mhttp://www.iphper.com/copstr1 g9 f" T9 j  u$ r3 [' [/ I* r
光是留言板+在线涂鸦就几百行代码(看来效率低了点)
/ m) |8 E5 @' ^* W+ {: X6 t5 `9 @% s  Q/ ?' D2 W% U
: N1 O8 M2 E# y% e( F7 w9 x6 V
FMS服务器的设置简单的仿照(一)就可以了,这段代码延续(一),加上了视频和语音发布,主要用到netstream.publish()方法,该方法也可以用于视频在线录制,除了检测摄相头和MIC状态的代码外,就增加了十几行的视频发布代码,有关摄相头和MIC的详细设置我并没有写,只是让大家看清楚它的工作原理,没有摄相头的朋友(我就没有摄相头)可以这样测试:打开麦克风说话,如果能听到回音就说明发布成功了
; `9 {6 Q4 r. \0 y
4 G& G/ o$ r2 y- V6 I" V# ^
9 ?; f, O: f3 Q1 |; x$ o9 k# g4 ?, x' b! Q. l' c
//建立与服务器的连接.0 X+ `8 u8 \: Y0 T
var sv_uri:String = "rtmp:/recordstream";
4 _4 ^( y) V: Z8 n5 I. dvar my_nc:NetConnection = new NetConnection ();
) \3 C7 g; q+ G9 c* G4 |8 ^' ~my_nc.connect (sv_uri);
6 R2 Q) _' |$ C) m( T. W7 [//新建共享对象;9 r" y/ @/ p! r3 S  @  ^: [& b
my_nc.onStatus = function (thisObj:Object){
+ q- a8 Q8 ~! p, F2 W        if (thisObj.code == "NetConnection.Connect.Success"){
0 W: X; d( d. f$ n! K                info_txt.text = "连接服务器成功!!";8 Z+ J  a+ \  p  P0 A3 D8 O
                info_txt.textColor = 0x66CC00;
# W# n4 S8 m" c+ {0 j        }/ @, L* Y. }- {; H7 u. R
        else{
  H4 u9 I* A- T( y' f                info_txt.text = "连接服务器失败!!"
* w: _% `% E0 e: W                info_txt.textColor = 0xFF0000;' }( a0 z3 n; N: i0 g
        }' u" v: g( Z! c+ n3 E1 d
}2 Y8 b! O& N$ H# [1 W/ `
var user_rso:SharedObject = SharedObject.getRemote ("chat_rso", my_nc.uri, true);
+ `8 ^' L. f% P2 a7 Z3 f7 n9 I  ouser_rso.connect (my_nc);+ N4 d( |$ S$ }- \  K4 }: V
//建立摄相头和麦克风对象
  g, y- |7 p$ X! }( vthis.cam = Camera.get();
2 S$ n. d: W& {( `6 ~7 }$ x/ ethis.mic = Microphone.get();0 Y3 V  O: r# [) R1 b
videobox.attachVideo(this.cam);; t1 S* @2 I9 @# l9 D. d
videobox.attachAudio(this.mic);! Y( c6 f9 Y, M( M. d. e$ ]  s
send_ns = new NetStream(my_nc);: v4 D: e( q( X
send_ns.attachVideo(this.cam);
, N8 D- N) w) Osend_ns.attachAudio(this.mic);
' M7 L; f& u8 e4 v* C8 i6 ^send_ns.publish("humorguy");
. D" w. x( [+ c5 ^  C( fget_ns = new NetStream(my_nc);8 I  c) c2 @, K0 O  `6 i( w' K% w
get_ns.play("humorguy");& b3 e6 F0 Z5 P7 a
videobox2.attachVideo(get_ns);0 b% f: t7 x8 ]' E
//更新聊天内容
6 i2 m; w* `/ ?  Tuser_rso.onSync = function (){
0 v8 C: n$ l( ^" |' k) b                chatOutput_txt.text += newline+this.data.chatname +":" + this.data.chatcontent;/ k' h8 Z! l; E$ Q9 W
                chatOutput_txt.scroll = chatOutput_txt.maxscroll+1;//确保最新消息能显示在输出框里, c) v' y0 C+ y# O$ X, v. w! O
}
; w( H, l, ?3 N- \/ n//回车键发送聊天内容
: {7 b. U0 e* a  e" s$ b; jfunction myOnKeyDown() {
" U$ p$ p+ O6 Q  z; ^    if (Key.getCode() == 13) {& v. q+ u5 z" |4 Z3 @! D' a
                if(chatInput_txt.text != undefined && chatInput_txt.text != user_rso.data.chatcontent){7 W) j% H# |: y
                    Selection.setFocus(chatInput_txt);
4 L6 p9 ~9 A2 Y* @4 e, M                        user_rso.data.chatcontent = chatInput_txt.text;: D3 J. t" \% o: [+ \! V5 C6 L* S
                        if(name_txt.text != "" && name_txt.text != user_rso.data.chatname){
1 }/ o3 a: W9 n9 a0 a                                user_rso.data.chatname = name_txt.text;
6 d( i0 [1 R+ ?$ z" n8 M                                }, d9 x2 I+ J: P: u& |
                }! L) H+ S6 i6 X4 f) Q3 z% k
    }
5 |& Q/ R) o7 G: h8 A}4 I' x3 g  t* F+ O! z
var myListener:Object = new Object();' {7 `- R, V# P1 [
myListener.onKeyDown = myOnKeyDown;0 S( A$ [" {2 G8 K
Key.addListener(myListener);: Z0 b8 b4 A- `+ w3 ?" [
//构造检测摄相头和麦克风状态的函数5 L9 a( ]0 p" C; V
function checkforCam_Mic() {5 P9 G3 L4 Q) {3 N+ U, A9 y( G* X
        camArray = Camera.names;( N  r$ j8 B' P! U" J, o
        micArray = Microphone.names;" p; F9 D3 V+ N- r: r; e6 F
        if (camArray.length>=1) {
$ X1 u' v1 }% C                temp_cam = Camera.get();7 r* p% O0 C' }
                if (temp_cam == -1) {
$ @* }# A- T( |                        camInfo_txt.text = '视频设备正忙!';
% b. y! ^' u( o7 {                        camInfo_txt.textColor = 0xFFCC00;
$ T4 l8 }/ z0 X$ _* ~                } else {
, K9 K" d% X# `: a/ j% Q& P& ~; w                        camInfo_txt.text = '视频设备可用!';
# L% r# ?* T  B! x3 k: s                        camInfo_txt.textColor = 0x66CC00;9 n0 ]9 r" Q; s* R
                }4 C5 Y* ]4 l( W& A( W6 f! K7 y
                delete temp_cam;
# |# O; o! D3 |; G        } else if (camArray.length == 0) {
; X" w, e% R$ K                camInfo_txt.text = '没有视频设备!';
* q7 S) |- ^- A* r                camInfo_txt.textColor = 0xFF0000;
$ q( Y6 r4 Q) O        }
" q& O% C. ]6 Q) s, e$ [        //检测麦克风状态
: b# z% h. c- K9 H: }& r        if (micArray.length>=1) {7 R/ a/ k$ \- f! e
                temp_mic = Microphone.get();1 G/ i. R& T1 |# v# P
                if (temp_mic == -1) {% O# v2 l& i2 e- k$ ~
                        camInfo_txt2.text = '麦克风正忙!';( X: M# H3 Q2 T- c- E2 J  W2 m
                        camInfo_tx2t.textColor = 0xFFCC00;
* M) r# J& W$ s0 \3 \                } else {
: y# c% N% T& R  U9 S                        camInfo_txt2.text = '麦克风可用!';+ ?3 V( E; {) E  Z. x5 B3 J
                        camInfo_txt2.textColor = 0x66CC00;
- g; N! e, _9 a2 ]5 q0 L                }- n9 @% h, x4 r+ y
                delete mic_cam;
- T7 a* y, X4 U  v$ ]  l! n        } else if (micArray.length == 0) {
3 c3 ^" X: T  Z) u2 J                camInfo_txt2.text = '没有麦克风!';
) U  @) o) d# i) D                camInfo_txt2.textColor = 0xFF0000;
6 L& Y5 j" y, S9 C5 K7 f        }' V7 ]2 ]; J* z) p5 ]1 W$ j
}
/ C& L4 X- L# C% s4 {. y# NcheckforCam_Mic();
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|宁德市腾云网络科技有限公司 ( 闽ICP备2022007940号-5|闽公网安备 35092202000206号 )

GMT+8, 2026-8-13 21:33 , Processed in 0.018640 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表