现在的位置: 首页 > 综合 > 正文

基于Flash Media Server实现视频会议,白板共享和PPT同步浏览的功能

2013年04月12日 ⁄ 综合 ⁄ 共 3578字 ⁄ 字号 评论关闭

上周接到了一个任务,说要基于Flash Media Server4.5来实现视频会议,白板共享和PPT文档浏览同步功能。

这周就开始着手这方面的研究和代码编写,现把中间经过的过程总结如下:

1、如何实现视频会议

基于Flash Media Server来实现视频共享其实很简单,30多行代码就搞定。

public function PublishLive()
        {
   nc = new NetConnection();
   nc.addEventListener(NetStatusEvent.NET_STATUS, onNetStatus);
   nc.connect("rtmp://localhost/publishlive");
        }

  private function onNetStatus(event:NetStatusEvent):void{
   trace(event.info.code);
   if(event.info.code == "NetConnection.Connect.Success"){
    publishCamera();
    displayPublishingVideo();
    displayPlaybackVideo();
   }
  }

  private function publishCamera() {
   cam = Camera.getCamera();
   mic = Microphone.getMicrophone();
   ns = new NetStream(nc);
   ns.attachCamera(cam);
   ns.attachAudio(mic);
   ns.publish("myCamera", "live");
   
  }

  private function displayPublishingVideo():void {
   vid = new Video(cam.width, cam.height);
   vid.x = 10;
   vid.y = 10;
   vid.attachCamera(cam);
   addChild(vid);
  }

  private function displayPlaybackVideo():void{
   nsPlayer = new NetStream(nc);
   nsPlayer.play("myCamera");
   vidPlayer = new Video(cam.width, cam.height);
   vidPlayer.x = cam.width + 20;
   vidPlayer.y = 10;
   vidPlayer.attachNetStream(nsPlayer);
   addChild(vidPlayer);
  }

2、如何实现白板共享

Flash教程里的例子通过200多行 的代码就搞定一个白板功能,而我要实现白板共享,其实就是把线条存储成数组,再通过SharedObject来实现远程共享,再通过

Flash Media Server来实现同步更新,很快就找到了思路。

 

replay_array = copyArray(pic_so.data._array);

 replay(canvas,replay_array,speed_bar.value);

 

function replay(_mc:MovieClip, _array:Array, speed:Number) {
 if (_array.length) {

  var line = _array.shift();
  var current_mc:MovieClip = _mc.createEmptyMovieClip("line"+_mc.getNextHighestDepth(), _mc.getNextHighestDepth());
  var style:Object = line.shift();
  var pos:Object = line.shift();
  current_mc.lineStyle(style.width,style.color,style.alpha);
  current_mc.moveTo(pos.x,pos.y);
  onEnterFrame = function () {
   drawALine(current_mc,line,speed);
  };
 } else {
  if (pic_so.data._array.length == 0 && _array.length == 0 && myArray[myPicIndex].history_array.length == 0) {
   clearAll(canvas,"line");
   myArray[myPicIndex].history_array = new Array();
   replay_array = new Array();
  }
 }

}

通过replay方法很快就能把白板的线条在客户端同步描绘。

呵呵,又搞定了白板共享。

 

3、如何实现PPT同步浏览

首先考虑在Flash里面只能加载图片,无法直接加载PPT文件,所以就找了如何把PPT转换为图片的思路。

你看下面的代码就可以了。

                Dim t As New Microsoft.Office.Interop.PowerPoint.Application
                Dim jpgPath As String = Folder & "\" & arrPath(0) & "\"
                If Not Directory.Exists(jpgPath) Then
                    Directory.CreateDirectory(jpgPath)
                End If
                Dim prese As Presentation
                If arrPath(1).ToLower = "pptx" Then
                    prese = t.Presentations.Open2007(Folder & "/" & FileName, MsoTriState.msoCTrue, MsoTriState.msoCTrue, MsoTriState.msoFalse)
                Else
                    prese = t.Presentations.Open(Folder & "/" & FileName, MsoTriState.msoCTrue, MsoTriState.msoCTrue, MsoTriState.msoFalse)
                End If
                Dim arrFileName(prese.Slides.Count - 1) As String
                For Each s As Slide In prese.Slides
                    s.Export(jpgPath + s.SlideNumber.ToString & ".jpg", "jpg")
                    arrFileName.SetValue(s.SlideNumber.ToString & ".jpg", s.SlideNumber - 1)
                Next

 

 

不错,这样Flash加载图片就比较简单了,在这里就不再描述了。

不过这里要注意用Microsoft的Office处理完PPT后要即时干掉未关闭的PowerPoint进程哦

 

Dim myProcesses()As
Process = Process.GetProcessesByName(
"POWERPNT")

ForEach
myProcess
As
Process
In
myProcesses

         myProcess.Kill()

Next

 

 最后输出:

 

                                                                                                                图1

 

 

 

                                                                                              图2

 

                                                                                                 图3

抱歉!评论已关闭.