8.71. 问题 我需要从用户的摄像机发送一个流到Flash Media Server (FMS) 实例,供一个聊天室或其他直播媒体应用程序。 8.7.2. 解决办法 通过使用flash.media.Camera.getCamera 方法捕获用户摄像机的视频流,附加摄像机到一个NetStream 并将被发送到的Flash Media Server 实例。使用NetStream 类publish 方法来发送一个特定名称的流到应用程序并处理它。 8.7.3. 讨论 publish 方法表明,一个Flash Media Server 已经通过NetConnection 类连接, NetStream 将发送信息到服务器。服务器对信息做什么处理依赖于应用程序。但是一些标志可以在publish 方法中设置,表明什么流信息将被服务器和Flash Player 处理。publish 方法有以下特性。
type:String (default = null) 一个字符串用来表示怎么发布流。有效的值有record,append,live (默认值)。如果你传送record,Flash Player 发布并记录直播的数据,保存记录的数据到一个名称和传送name 参数相配值的新的FLV 文件。该文件存储在服务器上一个包含服务器端程序的目录内的子目录中。如果文件已经存在,它将被覆盖。如果你传送append,Flash Player 发布和记录直播数据,附加纪录的数据到一个名称和传送name 参数相配值的新的FLV 文件,存储在服务器上一个包含服务器端程序的目录内的子目录中。如果没有符合name 参数的文件,将创建一个新的文件。如果你省略参数或传送live,Flash Player 发布直播数据但不纪录它。
如果有文件存在并且名称符合传送的name 参数值,他将被删除。
当你使用Flash Media Server 纪录流时,服务器创建一个FLV 文件并存储在服务器上服务器端程序所在目录内的一个子目录中。每一个流都保存在一个名称符合NetConnection.connect.传送的应用程序实例名称的目录中。服务器自动创建目录,你不需要去为每个应用程序实例创建。如下例,下面的代码显示,你如何连接一个特定的应用程序实例,存储在你应用程序目录中的一个名称为lectureSeries 的目录中。一个名称为lecture.flv 的文件存储在/yourAppsFolder/lectureSeries/streams/Monday 子目录中:
+展开
-ActionScript
var myNC:NetConnection = new NetConnection(); myNC.connect("rtmp://server.domain.com/lectureSeries/Monday"); var myNS:NetStream = new NetStream(myNC); myNS.publish("lecture", "record");
<mx:Canvasxmlns:mx="http://www.adobe.com/2006/mxml" width="400" height="500" creationComplete="setUpCam()"> <mx:Script> <![CDATA[ privatevar cam:Camera; privatevar nc:NetConnection; privatevar ns:NetStream; privatefunction setUpCam():void { trace(Camera.names.join(",")); //I'mdoingthisonlybecauseit's the only way the //flash player will pick up the camera on my MacBook cam = flash.media.Camera.getCamera("2"); vid.attachCamera(cam); nc = new NetConnection(); nc.addEventListener(NetStatusEvent.NET_STATUS, netStatus); nc.connect("http://localhost:3002"); } privatefunction netStatus(event:NetStatusEvent):void { switch(event.info) { case"NetConnection.Connect.Success": ns = new NetStream(nc); ns.attachCamera(cam, 20); ns.attachAudio(Microphone.getMicrophone()); ns.publish("appname", "live"); break; } }