...
Данный пример представляет собой двухсторонний видеочат с использованием клиентского Flash приложения, которое может быть запущено простым swf-файлом.
Пример демонстрирует работу Flash видеочата, который позволяет установить двухстороннюю видеосвязь с таким же примером для Android или Web SDK.
На скриншоте показана работа Flash видеочата.
...
| Code Block | ||||
|---|---|---|---|---|
| ||||
session = new Session(url, username); session.on(SessionStatus.FAILED, function():void{ setStatus(sessionStatus, SessionStatus.FAILED); onLeft(); }).on(SessionStatus.DISCONNECTED, function():void { setStatus(sessionStatus, SessionStatus.DISCONNECTED); onLeft(); }).on(SessionStatus.ESTABLISHED, function():void { setStatus(sessionStatus, SessionStatus.ESTABLISHED); joinRoom(); }); session.connect(); |
3. Во время присоединения к комнате будут добавлены реакции на различные события, происходящие внутри этой комнаты. line 150
...
| Code Block | ||||
|---|---|---|---|---|
| ||||
session.join(this.roomName).on(RoomStatus.STATE, function(room:Room):void{ var participants:Array = room.getParticipants(); setInviteAddress(room); if (participants.length > 0) { var chatState:String = "participants: "; for (var i:Number = 0; i < participants.length; i++) { installParticipant(participants[i]); chatState += participants[i].getName(); if (i != participants.length - 1) { chatState += ","; } } } } addMessage("chat", chatState); } else { addMessage("chat", " room is empty"); } publishLocalMedia(room); onJoined(room); }).on(RoomStatus.JOINED, function(participant:Participant):void{ installParticipant(participant); addMessage(participant.getName(), "joined"); }).on(RoomStatus.LEFT, function(participant:Participant):void{ removeParticipant(); addMessage(participant.getName(), "left"); }).on(RoomStatus.PUBLISHED, function(participant:Participant):void{ playParticipantsStream(participant); }).on(RoomStatus.FAILED, function(room:Room, info:Object):void{ failedInfo.text = info.info; session.disconnect(); }).on(RoomStatus.MESSAGE, function(message:Object):void{ addMessage(message.from.getName(), message.text); }); |
4. Публиковать видеопоток с веб-камеры на WCS-сервер. line 232
| Code Block | ||||
|---|---|---|---|---|
| ||||
private function publishLocalMedia(room:Room):void {
var stream:NetStream = room.publish(mic, cam);
stream.addEventListener(NetStatusEvent.NET_STATUS, function(event:NetStatusEvent):void{
Logger.info("handlePublishStreamStatus: "+event.info.code);
switch (event.info.code) {
case "NetStream.Publish.BadName":
setStatus(streamStatus, "FAILED");
onMediaStopped(room);
break;
case "NetStream.Unpublish.Success":
setStatus(streamStatus, "UNPUBLISHED");
onMediaStopped(room);
break;
case "NetStream.Publish.Start":
setStatus(streamStatus, "PUBLISHING");
onMediaPublished(stream);
break;
}
});
} |
5. Воспроизвести поток другого участника. line 207
| Code Block | ||||
|---|---|---|---|---|
| ||||
private function playParticipantsStream(p:Participant):void
{
var stream:NetStream = p.play();
if (stream != null) {
remoteDisplay.attachNetStream(stream);
stream.addEventListener(NetStatusEvent.NET_STATUS, function(event:NetStatusEvent):void{
Logger.info("handlePlayStreamStatus: "+event.info.code);
switch (event.info.code) {
case "NetStream.Video.DimensionChange":
var res:Object = downScaleToFitSize(remoteDisplay.videoWidth, remoteDisplay.videoHeight, display.width, display.height);
remoteDisplay.width = res.w;
remoteDisplay.height = res.h;
remoteDisplayHolder.width = res.w;
remoteDisplayHolder.height = res.h;
break;
case "NetStream.Play.UnpublishNotify":
case "NetStream.Play.Stop":
remoteDisplay.clear();
break;
}
});
}
} |