FMS3系列(四):在线视频录制、视频回放

使用Flash/Flex+FMS实现在线视频录制、视频回放的很简单的。通过阅读API文档后基本都可以实现这个功能,本文也意在抛砖引玉,希望对刚入手这块的朋友有所帮助。

首先建立好Flash(ActionScript 3.0)文件,从组件(可使用Ctrl+F7打开)库中拖拽相应的组件到Flash舞台上,如下图:


附件: SPUI.jpg


界面布局好后我们通过程序设置组见的显示文本以及为按扭添加事件监听,新建一个ActionScript类文件,编写代码如下: 1 public function PublishPlay():void

2 {

3 lbName.text="请输入视频文件名:";

4 btnPublish.label="开始录制";

5 btnPublish.addEventListener(MouseEvent.CLICK,onPublishClick);

6 btnStop.label="停止录制";

7 btnStop.addEventListener(MouseEvent.CLICK,onStopHandler);

8 btnPlay.label="视频回放";

9 btnPlay.addEventListener(MouseEvent.CLICK,onPlayHandler);

10

11 video=new Video();

12 cam = Camera.getCamera();

13 mic = Microphone.getMicrophone();

14 if(cam==null)

15 {

16 trace("没检测到视频摄像头");

17 }

18 else

19 {

20 video.attachCamera(cam);

21 }

22 addChild(video);

23 }

复制代码以上代码同时实现了将视频显示到flash界面上,通过Camera的静态方法getCamrea()方法可以直接获取到视频摄像头的数据。其中用到的video,cam和mic变量为预先定义好的,如下: 1 private var nc:NetConnection;

2 private var ns:NetStream;

3 private var video:Video;

4 private var cam:Camera;

5 private var mic:Microphone;

复制代码接下来就需要连接到FMS服务器实现视频录制功能了,通过NetConnection类实现与FMS服务器的连接,并通过流将视频数据发布到FMS服务器。 1 private function onPublishClick(evt:MouseEvent):void

2 {

3 nc=new NetConnection();

4 nc.addEventListener(NetStatusEvent.NET_STATUS,onPublishStatusHandler);

5 nc.connect("rtmp://localhost/PulishedStreams");

6 }

7

8 private function onPublishStatusHandler(evt:NetStatusEvent):void

9 {

10 if(evt.info.code=="NetConnection.Connect.Success")

11 {

12 ns=new NetStream(nc);

13 ns.addEventListener(NetStatusEvent.NET_STATUS,onPublishStatusHandler);

14 ns.client=new CustomClient();

15 ns.attachCamera(cam);

16 ns.attachAudio(mic);

17 ns.publish(tbName.text,"record");

18 }

19 }

复制代码在录制视频的时候视频命名是取的文本输入框的值作为视频名,OK,现在测试Flash(Ctrl+Enter),通过点击 按扭开始录制视频。通过查看FMS服务器的文件目录可以看到,刚刚测试录制的视频存放于FMS服务器应用下的streams/_definst_目录下。详见下图所示:

附件: SPfile.jpg



录制功能完成了,通过测试也可以成功的录制视频。最后我们通过程序来播放刚刚录制是视频。关于播放视频在上一篇文章《FMS3系列(三):创建基于FMS的流媒体播放程序,看山寨帮的山寨传奇》中已介绍怎么实现,这里就直接帖出代码不做解释。 1 private function onPlayHandler(evt:MouseEvent):void

2 {

3 nc=new NetConnection();

4 nc.addEventListener(NetStatusEvent.NET_STATUS,onPlayStatusHandler);

5 nc.connect("rtmp://localhost/PulishedStreams");

6 }

7

8 private function onPlayStatusHandler(evt:NetStatusEvent):void

9 {

10 if(evt.info.code=="NetConnection.Connect.Success")

11 {

12 ns=new NetStream(nc);

13 ns.addEventListener(NetStatusEvent.NET_STATUS,onPlayStatusHandler);

14 ns.client=new CustomClient();

15

16 video = new Video();

17 video.attachNetStream(ns);

18 ns.play(tbName.text,0);

19 addChild(video);

20 }

21 }

复制代码通过本文的基础上可以很方便的扩展出在线拍照等多种应用,有兴趣的朋友可以去试验下。下面是本文完整的示例代码。

本文完整示例代码 1package

2{

3 import flash.net.*;

4 import flash.events.*;

5 import flash.media.*;

6 import flash.display.*;

7 import fl.controls.*;

8

9 public class PublishPlay extends Sprite

10 {

11 private var nc:NetConnection;

12 private var ns:NetStream;

13 private var video:Video;

14 private var cam:Camera;

15 private var mic:Microphone;

16

17 public function PublishPlay():void

18 {

19 lbName.text="请输入视频文件名:";

20 btnPublish.label="开始录制";

21 btnPublish.addEventListener(MouseEvent.CLICK,onPublishClick);

22 btnStop.label="停止录制";

23 btnStop.addEventListener(MouseEvent.CLICK,onStopHandler);

24 btnPlay.label="视频回放";

25 btnPlay.addEventListener(MouseEvent.CLICK,onPlayHandler);

26

27 video=new Video();

28 cam = Camera.getCamera();

29 mic = Microphone.getMicrophone();

30 if(cam==null)

31 {

32 trace("没检测到视频摄像头");

33 }

34 else

35 {

36 video.attachCamera(cam);

37 }

38 addChild(video);

39 }

40

41 private function onStatusHandler(evt:NetStatusEvent):void

42 {

43 trace(evt.info.code);

44 if(evt.info.code=="NetConnection.Connect.Success")

45 {

46 ns=new NetStream(nc);

47 ns.addEventListener(NetStatusEvent.NET_STATUS,onStatusHandler);

48 ns.client=new CustomClient();

49 }

50 }

51

52 private function onPublishClick(evt:MouseEvent):void

53 {

54 nc=new NetConnection();

55 nc.addEventListener(NetStatusEvent.NET_STATUS,onPublishStatusHandler);

56 nc.connect("rtmp://localhost/PulishedStreams");

57 }

58

59 private function onPublishStatusHandler(evt:NetStatusEvent):void

60 {

61 if(evt.info.code=="NetConnection.Connect.Success")

62 {

63 ns=new NetStream(nc);

64 ns.addEventListener(NetStatusEvent.NET_STATUS,onPublishStatusHandler);

65 ns.client=new CustomClient();

66 ns.attachCamera(cam);

67 ns.attachAudio(mic);

68 ns.publish(tbName.text,"record");

69 }

70 }

71

72 private function onStopHandler(evt:MouseEvent):void

73 {

74 nc.close();

75 }

76

77 private function onPlayHandler(evt:MouseEvent):void

78 {

79 nc=new NetConnection();

80 nc.addEventListener(NetStatusEvent.NET_STATUS,onPlayStatusHandler);

81 nc.connect("rtmp://localhost/PulishedStreams");

82 }

83

84 private function onPlayStatusHandler(evt:NetStatusEvent):void

85 {

86 if(evt.info.code=="NetConnection.Connect.Success")

87 {

88 ns=new NetStream(nc);

89 ns.addEventListener(NetStatusEvent.NET_STATUS,onPlayStatusHandler);

90 ns.client=new CustomClient();

91

92 video = new Video();

93 video.attachNetStream(ns);

94 ns.play(tbName.text,0);

95 addChild(video);

96 }

97 }

98 }

99}

复制代码
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值