要做一个完整的录制程序,处理RPC请求的类不仅要继承ApplicationAdapter,还要继承IStreamService接口,该接口定义了play(),pause(),publish(),createStream()等一系列方法来完善程序

关于安全性,可以自定义一个实现FluorineFx.Messaging.Api.Stream.IStreamPublishSecurity接口的类,并定义一个IsPublishAllowed()方法,在该方法里可以判断发布流的类型、流的名称以及对发布流进行授权等相关操作。然后重写applicationAdapter类的appStart()方法,并注册该安全策略:RegisterStreamPublishSecurity(new PublishSecurity());

录制的文件保存在apps/MyRoom/streams下

录制时通过netStream.publish(name,type)来实现的,参数说明如下:

name:String (default = null) — 标识该流的字符串。 如果传递 false,则发布操作将停止。 订阅此流的客户端必须在调用 NetStream.play() 时仍然传递此名称。 不必在流名称中包含文件扩展名

type:String (default = null) — 指定如何发布该流的字符串。 有效值为“record”、“append”和“live”。 默认值为“live”

如果传递“record”,则 Flash Player 将发布并录制实时数据,同时将录制的数据保存到名称与传递给 name 参数的值相匹配的 FLV 文件中。 该文件保存在服务器上服务器应用程序所在目录的子目录中。 如果该文件已经存在,则覆盖该文件。

如果传递“append”,则 Flash Player 将发布并录制实时数据,同时将录制的数据追加到名称与传递给 name 参数的值相匹配的 FLV 文件中,该文件保存在服务器上服务器应用程序所在目录的子目录中。 如果未找到名称与 name 参数相匹配的文件,则创建一个。

如果省略此参数或传递“live”,则 Flash Player 将发布实时数据而不进行录制。 如果存在名称与传递给 name 参数的值相匹配的文件,则删除它。

服务器端代码:

MyVideoApp.cs
public class MyVideoApp : ApplicationAdapter
{
public override bool AppStart(FluorineFx.Messaging.Api.IScope application)
{
RegisterStreamPublishSecurity(new PublishSecurity());
return base.AppStart(application);
}
}
PublishSecurity.cs
using System;
using System.Collections.Generic;
using System.Text;
using FluorineFx.Messaging.Api.Stream;
using FluorineFx.Messaging.Api;
using FluorineFx.Context; namespace ServiceLibrary5
{
public class PublishSecurity : IStreamPublishSecurity
{
public bool IsPublishAllowed(IScope scope, string name, string mode)
{
//if (!"live".Equals(mode))
//{
// // Not a live stream
// return false;
//}
  if (!"record".Equals(mode))
{
//不是录制流
                return false;
} IConnection connection = FluorineContext.Current.Connection;
if (!"authenticated".Equals(connection.GetAttribute("UserType")))
{
// User was not authenticated
return false;
} if (!name.StartsWith("testing"))
return false;
else
return true;
}
}
}

客户端代码:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:UIComponent id="uiBox" width="320" height="240" />
<mx:Label x="371" y="222" text="Label" id="lblMessage"/>
<mx:Button x="371" y="48" label="连接服务器" click="onConnect()" />
<mx:Button x="371" y="94" label="开始录制" click="onStartRecord()" />
<mx:Button x="371" y="136" label="停止录制" click="onStopRecord()" />
<mx:Button x="371" y="180" label="播放视频" click="onPlayRecord()" /> <mx:Script>
<![CDATA[
private var nc:NetConnection; private function onConnect():void
{
nc = new NetConnection();
nc.addEventListener(NetStatusEvent.NET_STATUS,onNetStatus);
nc.connect("rtmp://localhost:8323/MyVideoRoom");
nc.client = this;
} private function onNetStatus(event:NetStatusEvent):void
{
if(event.info.code == "NetConnection.Connect.Success")
{
this.lblMessage.text = "连接服务器成功";
}
else
{
this.lblMessage.text = "连接服务器失败";
}
} private function onStartRecord():void
{
if(nc)
{
var ns:NetStream = new NetStream(nc); var mic:Microphone = Microphone.getMicrophone();
var camera:Camera = Camera.getCamera(); ns.attachAudio(mic);
ns.attachCamera(camera); ns.publish("demo001","record");
this.lblMessage.text = "录制中……";
}
} private function onStopRecord():void
{
if(nc)
{
nc.close();
this.lblMessage.text = "已停止录制";
}
} private function onPlayRecord():void
{
nc = new NetConnection();
nc.addEventListener(NetStatusEvent.NET_STATUS,onNetStatus2);
nc.connect("rtmp://localhost:8323/MyVideoRoom");
} private function onNetStatus2(event:NetStatusEvent):void
{
if(event.info.code == "NetConnection.Connect.Success")
{
var ns:NetStream = new NetStream(nc); var video:Video = new Video();
video.attachNetStream(ns);
this.uiBox.addChild(video); ns.play("demo001");
}
}
]]>
</mx:Script>
</mx:Application>

利用FluorineFX录制音频与视频的更多相关文章

  1. 使用PYaudio录制音频和视频(自己)

    参考:https://blog.csdn.net/zhaoyun_zzz/article/details/84341801 音频录制:简洁版 import pyaudioimport waveimpo ...

  2. 【Android】20.0 第20章 音频、视频、拍照、语音合成

    分类:C#.Android.VS2015: 创建日期:2016-03-11 一.简介 Android提供了常见的多媒体文件编码.解码机制,你可以直接调用Android提供的API,实现相册.播放器.录 ...

  3. Android录制音频的三种方式

    对于录制音频,Android系统就都自带了一个小小的应用,可是使用起来可能不是特别的灵活.所以有提供了另外的俩种. 下边来介绍下这三种录制的方式; 1.通过Intent调用系统的录音器功能,然后在录制 ...

  4. 利用FFmpeg玩转Android视频录制与压缩(二)<转>

    转载出处:http://blog.csdn.net/mabeijianxi/article/details/72983362 预热 时光荏苒,光阴如梭,离上一次吹牛逼已经过去了两三个月,身边很多人的女 ...

  5. 使用 Xbox Game 录制桌面视频(录制音频)

    使用 Xbox Game 录制桌面视频(附带音频) 前言:可能自己音频输出的问题,一直无法用工具录制桌面的音频,而最后发现利用 Xbox Game 录制游戏视频的功能很好地解决我们的问题. 1)打开游 ...

  6. Java 利用缓冲字节流来实现视频、音频、图片的复制粘贴

    InputStream:继承自InputStream的流都是用于向程序中输入数据的,且数据单位都是字节(8位). OutputSteam:继承自OutputStream的流都是程序用于向外输出数据的, ...

  7. iOS音频与视频的开发(二)- 使用AVAudioRecorder进行录制音频

    1.使用AVAudioRecorder录制视频 AVAudioRecorder与AVAudioPlayer类似,它们都属于AVFoundation的类.AVAudioRecorder的功能类似于一个录 ...

  8. Windows Store App 音频和视频

    在Windows应用商店应用中提供了MediaElement控件,该控件能为应用提供音频和视频播放功能.就像之前提到的,虽然在多媒体应用开发中,开发人员可以自行开发一套音频.视频编解码规范和开发媒体播 ...

  9. 使用HTML 5捕捉音频与视频信息

    长期以来,音频与视频信息的捕捉一直是Web开发中的一个难点.许多年来,我们一直依赖浏览器插件来实现这个需求. 在HTML 5中,出现了许多可以访问硬件设备的API,例如访问GPS设备的Geolocat ...

随机推荐

  1. kerboros安装

    尽管前面尝试了hadoop的simple认证方式,这种方法不是特别安全,在介绍一下hadoop的kerberos方式之前,下面我们尝试一下kerberos. 首先介绍一下Kerboros安装 OS 版 ...

  2. Yii 1 数据库操作 笔记

    $result = array( 'id'=>null, 'val'=>0 ); $row1 = Yii::app()->db->createCommand()->ins ...

  3. 企业部署Linux应用将拥有更低的整体拥有成本

    企业部署Linux应用将拥有更低的整体拥有成本     使用Linux能为企业的IT解决方案降低TCO(整体拥有成本Total Cost of The Ownership)吗?在面临这个问题时,很多企 ...

  4. 好用的shell命令行: fish的配置

    fish的可视化配置命令: $ fish_config 其配置文件夹为 ~/.config/fish. 1.要设置环境变量,在配置文件夹里新建 config.fish 文件,它会作为fish 启动时的 ...

  5. 游戏模块分析总结(2)之UI、操作篇

    转自:http://www.gameres.com/309812.html 游戏模块分析总结(2)之UI.操作篇 发布者: wuye | 发布时间: 2014-12-12 15:03| 评论数: 0 ...

  6. HDU 2101 A + B Problem Too 分类: ACM 2015-06-16 23:57 18人阅读 评论(0) 收藏

    A + B Problem Too Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

  7. Accessor Search Implementation Details

    [Accessor Search Implementation Details] Key-value coding attempts to use accessor methods to get an ...

  8. Unity3D Script Keynote

    [Unity3D Script Keynote] 1.创建GameObject if(GUILayout.Button("创建立方体",GUILayout.Height(50))) ...

  9. POJ 2386 Lake Counting (水题,DFS)

    题意:给定一个n*m的矩阵,让你判断有多少个连通块. 析:用DFS搜一下即可. 代码如下: #pragma comment(linker, "/STACK:1024000000,102400 ...

  10. opencv win7 配置

    按照官网的配置方法,结果出现了下面的错误信息F:\eclipse C++ workspace\test\Debug/../src/test.cpp:18: undefined reference to ...