首页 > 生活杂谈 > (译)Learning Flash Media Server 3中文版-第2章下部分

(译)Learning Flash Media Server 3中文版-第2章下部分

2008年5月24日 已被阅读过 61 次

(翻译能力有限,仅供个人学习参考,看得懂就好-_-||)2008-5-24 21:28

2.3. 组合录制和播放的应用程序

这个最简单的应用程序,最后可以用来录制和播放。它使用两个视频窗口:在你播放一个已录制的视频的同时,保留现场观看。它使用MovieClip对像来作为扩展类。这个改变展示了你可以如何将一个基于MovieClip的logo加入到你的应用程序中。

照以下步骤来制作:

  1. 建立一个RecordPlay.fla,舞台尺寸为650X400
  2. 把logo添加到舞台(简单地画一个logo,选择它后按F8键,选择影片剪辑类型,勾选为ActionScript导出,然后点确定)
  3. 文档类中填入RecordPlay
  4. 建立一个RecordPlay.as
  5. 在RecordPlay.as中添加Example 2-3中的代码

Example 2-3. RecordPlay.as

Code View:

package

{

import fl.controls.Button;

import fl.controls.TextInput;

import flash.display.MovieClip;

import flash.net.NetConnection;

import flash.net.NetStream;

import flash.events.NetStatusEvent;

import flash.events.MouseEvent;

import flash.events.Event;

//import flash.net.ObjectEncoding;

import flash.media.Camera;

import flash.media.Microphone;

import flash.media.Video;

public class RecordPlay extends MovieClip

{

private var nc:NetConnection;

private var ns:NetStream;

private var rtmpNow:String;

private var msg:Boolean;

private var cam:Camera;

private var mic:Microphone;

private var vid1:Video;

private var vid2:Video;

private var recordBtn:Button;

private var stopBtn:Button;

private var playBtn:Button;

private var textInput:TextInput;

private var metaSniffer:Object;

private var dur:Number;

function RecordPlay ()

{

//NetConnection.defaultObjectEncoding = flash.net.ObjectEncoding.AMF0;

nc=new NetConnection();

nc.addEventListener (NetStatusEvent.NET_STATUS,checkConnect);

rtmpNow=”rtmp://192.168.0.11/vid2/recordings”;

//rtmpNow=”rtmp:/vid2/recordings”;

nc.connect (rtmpNow);

addMedia ();

addUI ();

recordBtn.addEventListener (MouseEvent.CLICK,startRecord);

stopBtn.addEventListener (MouseEvent.CLICK,stopAll);

playBtn.addEventListener (MouseEvent.CLICK,startPlay);

}

private function checkConnect (e:NetStatusEvent):void

{

msg=(e.info.code==”NetConnection.Connect.Success”);

if (msg)

{

ns = new NetStream(nc);

metaSniffer=new Object();

ns.client=metaSniffer;

metaSniffer.onMetaData=getMeta;

}

}

private function getMeta (mdata:Object):void

{

//Dummy to avoid error

}

private function addMedia ():void

{

cam=Camera.getCamera();

cam.setKeyFrameInterval (12);

cam.setMode (240,180,15);

cam.setQuality (0,80);

mic=Microphone.getMicrophone();

mic.rate=11;

videoSetup ();

}

private function videoSetup ():void

{

vid1=new Video(cam.width,cam.height);

vid1.attachCamera (cam);

vid1.x=100;

vid1.y=70;

addChild (vid1);

vid2=new Video(cam.width,cam.height);

vid2.x=vid1.x+vid1.width+10;

vid2.y=vid1.y;

addChild (vid2);

}

private function addUI ():void

{

recordBtn=new Button();

recordBtn.label=”Record”;

recordBtn.x=100;

recordBtn.y=70+(cam.height) +5;

recordBtn.width=70;

addChild (recordBtn);

stopBtn=new Button();

stopBtn.label=”Stop”;

stopBtn.x=recordBtn.x+100;

stopBtn.y=recordBtn.y;

stopBtn.width=60;

addChild (stopBtn);

playBtn=new Button();

playBtn.label=”Play”;

playBtn.x=stopBtn.x+85;

playBtn.y=recordBtn.y;

playBtn.width=60;

addChild (playBtn);

textInput=new TextInput();

textInput.x=recordBtn.x;

textInput.y=recordBtn.y + 30;

addChild (textInput);

}

private function startRecord (e:Event):void

{

if (ns)

{

recordBtn.label=”Recording”;

ns.attachAudio (mic);

ns.attachCamera (cam);

ns.publish (textInput.text,”record”);

}

}

private function stopAll (e:Event):void

{

playBtn.label=”Play”;

recordBtn.label=”Record”;

ns.close ();

}

private function startPlay (e:Event):void

{

if (ns)

{

playBtn.label=”Playing”;

vid2.attachNetStream (ns);

ns.play (textInput.text);

}

}

}

}

最后一步就是测试你的应用程序了。与本章中的其它两个应用程序一样,使用了相同的RTMP地址。你可以基于相同的服务端程序而建立不同的客户端程序。在RTMP地址中使用不同的实例名称,可以在单个的应用程序中,产生不同的服务端目录。

图2-9本地现场视频和播放已录制的视频

clip_image002

通过这个简单的应用程序,你现在可以录制和播放任何你想播放的视频了,或者让在世界各地的其它人来播放它。

提示

你将会非常多的使用到你的服务端目录。为了节省时间,建立一个到你的应用程序的快捷方式,这样,每次你需要访问您的服务器端文件夹时,就不必繁琐地浏览您的所有文件夹和子文件夹。

没有优化麦克风和摄影头的设置,它们使用了很多的带宽,你的应用程序没有发挥最大优势。相反,有限度的使用设定,给您提供最好的视频。下一章中,您可以设置摄像头和麦克风来优化您的应用程序。之后的章节,将详述录制和播放FLV文件的不同。若要开始,请确认您使用过了这一章中的应用程序的基本元素。

分享到新浪微博
本文的评论功能被关闭了.