`
wenbin151
  • 浏览: 31550 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论
阅读更多
录像之后的下一步自然是视频会议这种类型的操作。前面说了,在线录像只需要在客户端使用摄像头,并且调用netStream.publish() 方法就可以了,视频会自动存放在 /myapp/stream 文件夹下面(全部缺省的情况下),文件名就是发布时通过publish传入的第一个字符串变量。
真正使用时,比如56、ku6这种视频网站的在线录制,肯定还要在录制完成后进行一定的逻辑,但是那些东西服务器端随便做做就可以。因此可以说,使用类fms服务器录制视频是该项应用中最简单的。

视频会议的话,需要及时刷新视频列表,告诉在线用户有哪些视频接过来了;对于视频提供者(provider),需要知道有哪些人在观看视频,甚至可以进行观众遴选;同时,最好能即时选择是否录制,等等。

那么,首先打通技术障碍。再次打开官方文档到ApplicationAdpter一页,可以看到:

streamBroadcastClose 播放关闭时触发
streamBroadcastStart 播放开始时触发
streamPublishStart   广播流开始发布
streamRecordStart    广播流开始录制
streamSubscriberClose 订阅者离开时触发
streamSubscriberStart 订阅者开始时触发

这些事件将在视频广播期间触发,而我的应用扩展自ApplicationAdpter类,那么我直接复写(override)这些事件,将需要的处理加在里面,就可以了。对了,这里补充一点,鉴于我半路出家的技术水平,现在还不会用log4j来配置log,看不到控制台,不过我找来另一种方法折中,就是在计算机管理里面将red5启动改为手动,然后用安装目录的red5.bat来启动服务,就可以在dos窗口看到控制台的输出了,哈哈。

前面使用过一个so来同步在线用户,这里继续使用它的“stream”插槽来同步当前视频列表。建一个ArrayList来存放视频名称——也就是publish方法创建的视频,在同一个域中,他们的名称是独占的,也就是说,如果有一个视频叫“myvideo”,你又要创建一个视频也叫“myvideo”,那么就会报错——广播开始和结束都会触发相关事件,这个时候把视频名称记入数组并赋给so,然后就会同步到所有客户端。客户端刷新列表后,就可以选择观看某人的视频,这个时候先使用NetStream.play("myvideo")方法来播放视频,然后用video.attachNetStream方法将流绑定在播放框上。点播,视频会议,就这么完成了。

但是仍然有很多没搞明白的地方。比如订阅者的两个事件都没有触发过,比如好好的3段视频突然就都断了,还需要进一步研究,嗯嗯。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics