找回密码
 注册
查看: 4653|回复: 0

据说是Flash的视频聊天代码

[复制链接]
发表于 2010-2-23 19:15:52 | 显示全部楼层 |阅读模式
只是把以前做的单个的功能整合了一下,本来还想弄个FMS的视频聊天,不过虚拟空间没办法../ M  f4 J/ }) L
http://www.iphper.com/copstr
- X" l* T7 B. j0 N5 v光是留言板+在线涂鸦就几百行代码(看来效率低了点)
0 }3 L+ e6 Z4 S2 k2 P. {: ^. M8 A; ~  Y6 L
4 j- Z- C: s/ w6 G( u
FMS服务器的设置简单的仿照(一)就可以了,这段代码延续(一),加上了视频和语音发布,主要用到netstream.publish()方法,该方法也可以用于视频在线录制,除了检测摄相头和MIC状态的代码外,就增加了十几行的视频发布代码,有关摄相头和MIC的详细设置我并没有写,只是让大家看清楚它的工作原理,没有摄相头的朋友(我就没有摄相头)可以这样测试:打开麦克风说话,如果能听到回音就说明发布成功了
* v6 K; [1 T" W/ \% a$ n% @. h! g& a* M, K9 J: M* p; X! T4 ^

9 R7 n$ I! ^. M5 _
& w/ c# z! \, @! o' Z//建立与服务器的连接.
& G/ \! N4 x4 {, m) N  Gvar sv_uri:String = "rtmp:/recordstream";
+ h, T& j" W% N; r" `var my_nc:NetConnection = new NetConnection ();5 t: B5 Z7 G9 M9 B/ f
my_nc.connect (sv_uri);
: X2 Y: S1 \- J; @% K//新建共享对象;
$ H8 o2 u! P" h& R2 Qmy_nc.onStatus = function (thisObj:Object){
9 Y* e3 @# Z9 N" T) w        if (thisObj.code == "NetConnection.Connect.Success"){
( P2 R- H9 L2 o  N! X                info_txt.text = "连接服务器成功!!";  L  c+ a' C8 W. X$ h+ {( b
                info_txt.textColor = 0x66CC00;
7 ~  K2 w9 C/ ^4 ^        }
$ v2 x- C0 N% i& n+ C; y        else{
; {7 N/ c" _( h& m* O6 M9 z                info_txt.text = "连接服务器失败!!"# X% s" L* V/ r+ Y
                info_txt.textColor = 0xFF0000;% b* G4 X- D$ A
        }8 p9 A, X3 Y! z4 w
}
$ P% F/ W: W1 ]5 k) ivar user_rso:SharedObject = SharedObject.getRemote ("chat_rso", my_nc.uri, true);7 j& G# j* [. I1 d! J( Z* B
user_rso.connect (my_nc);2 S4 o0 N; C" ^; y, O
//建立摄相头和麦克风对象7 P$ t4 z" D& ^: U: H- R
this.cam = Camera.get();
# F1 n( J: q* K; d# y% ~+ i. Ythis.mic = Microphone.get();6 n% `; r% Z4 `6 E* I$ p4 H) U
videobox.attachVideo(this.cam);
0 d, S0 k4 ]. h# cvideobox.attachAudio(this.mic);: w0 h. d9 X4 |8 V& J
send_ns = new NetStream(my_nc);
8 `0 Q- [- p# N3 ]send_ns.attachVideo(this.cam);- R! b8 O6 h4 M& D( h7 t
send_ns.attachAudio(this.mic);
2 P6 A8 v* i5 F* ~4 wsend_ns.publish("humorguy");8 F# y. Z4 S: Q( [" N; R( m# X0 E
get_ns = new NetStream(my_nc);
% K9 p1 A3 c2 Q6 fget_ns.play("humorguy");9 ]) n, ]& C1 T: J
videobox2.attachVideo(get_ns);8 B( O/ d- w1 b: B7 ]: y
//更新聊天内容% X' N4 H1 W- N# R
user_rso.onSync = function (){$ B' J% G! m( l
                chatOutput_txt.text += newline+this.data.chatname +":" + this.data.chatcontent;. a/ e6 X8 ^* z/ q/ E2 z
                chatOutput_txt.scroll = chatOutput_txt.maxscroll+1;//确保最新消息能显示在输出框里
/ c) a3 M: L" W) E" e}
3 v- D+ v$ o( g$ ]' }# A! ]6 a//回车键发送聊天内容
1 Q+ i* T; z1 Yfunction myOnKeyDown() {
. h7 U9 e5 l# r1 T+ |, Q9 u    if (Key.getCode() == 13) {
) d0 ]: v+ ^/ E8 @5 _* k# i                if(chatInput_txt.text != undefined && chatInput_txt.text != user_rso.data.chatcontent){5 @8 ~) v( k) Q2 d- a! H& T
                    Selection.setFocus(chatInput_txt);
- d& b  V2 `. P; }  _1 [                        user_rso.data.chatcontent = chatInput_txt.text;
( e# J5 h! m2 {0 b                        if(name_txt.text != "" && name_txt.text != user_rso.data.chatname){
2 }3 X6 n9 ~) S" i1 z1 U                                user_rso.data.chatname = name_txt.text;
- _, P# |: E0 V3 k1 v                                }
5 o9 |2 Q$ A& |6 [5 D! X- k4 M                }
! G. T& r" `" P    }- @  o3 [7 U& l& [' i
}
9 P& ], c/ [. x- a. j1 Pvar myListener:Object = new Object();
7 m! G7 ~! \# k+ D( W# M( w: [myListener.onKeyDown = myOnKeyDown;
5 C% s4 z8 }; h6 k2 y% ]- B8 eKey.addListener(myListener);7 v) {+ M. N5 }8 V9 @+ z) L
//构造检测摄相头和麦克风状态的函数" v; W) w* A( e: u9 b9 J5 L$ ~
function checkforCam_Mic() {
# _! O& k' c: q/ b        camArray = Camera.names;& X' p5 X$ j0 r2 S0 R( C
        micArray = Microphone.names;) @/ X0 h$ T) r& [
        if (camArray.length>=1) {
9 i0 R2 W& H# ], i# `6 o/ Y                temp_cam = Camera.get();" |& j0 J% a: Q9 {  W/ `
                if (temp_cam == -1) {0 u. }* Y( }/ G" k8 @
                        camInfo_txt.text = '视频设备正忙!';8 I9 q% Z# a2 }4 G
                        camInfo_txt.textColor = 0xFFCC00;
' g4 `; J. F) o/ I  X                } else {
- T' d0 i% e2 C7 s5 D0 L' M                        camInfo_txt.text = '视频设备可用!';( E; x  E2 g8 I# n# w
                        camInfo_txt.textColor = 0x66CC00;' R& a8 a& t/ b4 `/ r
                }0 L9 L0 x# l4 ?+ _6 l" x! w- f
                delete temp_cam;
5 t3 G5 ~5 Z$ [) Q        } else if (camArray.length == 0) {% Q( K. ~' V2 n1 l( t- K/ T2 z
                camInfo_txt.text = '没有视频设备!';
5 I7 K) d: q& {                camInfo_txt.textColor = 0xFF0000;" d$ A# e' ~9 t% v6 P* X% Z& G0 [
        }
) Z3 M) @# a! t1 `9 }        //检测麦克风状态 * n, u& Z; N+ b% g
        if (micArray.length>=1) {
$ _: o5 i# z) |                temp_mic = Microphone.get();
+ N  j3 e2 x7 @1 i( P% t                if (temp_mic == -1) {
( V; i' `+ L9 Z2 [, t                        camInfo_txt2.text = '麦克风正忙!';
% |& a9 a$ ~5 Q5 w0 a! h2 S% Q                        camInfo_tx2t.textColor = 0xFFCC00;
3 Y; N& ~4 x2 i                } else {
; `, z* z7 T$ K  Z1 f                        camInfo_txt2.text = '麦克风可用!';$ [; G; T* s5 m1 m  F
                        camInfo_txt2.textColor = 0x66CC00;
0 M- `$ \5 x9 t                }
: D" N/ i: v2 |  ?5 I$ X                delete mic_cam;' q% ^/ Q! {9 S
        } else if (micArray.length == 0) {
) {$ j! v, k+ S% E% R                camInfo_txt2.text = '没有麦克风!';
. ^  W6 B( L/ x6 z- [; g2 G3 }& P# a                camInfo_txt2.textColor = 0xFF0000;8 z# C: f) {) |" p$ v- F
        }
8 X2 G2 h5 `' \; ]}3 i7 J! v7 }8 C( a, ^4 B# ]  F
checkforCam_Mic();
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-10-1 22:48 , Processed in 0.016273 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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