在服务器端录制语音视频

在我以前的一篇博文《实现语音视频录制(demo源码)》中,详细介绍了在网络视频聊天系统中的客户端如何实现语音视频的录制,而近段时间了,有几个朋友问起,如果想在服务端实现录制功能,该怎么做了?其中有个朋友的需求是这样的:他的系统是一个在线培训系统,需要在服务端将指定老师的讲课(包括语音和视频)录制下来,并保存为.mp4文件,以便随时可以查阅这些文件。

  本文我们就做一个demo实现类似的功能,演示如何在服务端录制某个指定在线用户的语音视频,并提供三种录制模式:录制语音视频、仅录制语音、仅录制视频。

一.实现原理

  要实现这个demo,需涉及到以下几个技术:

(1)在服务端采集指定用户的语音、视频数据。

(2)在服务端将图像使用H264编码,语音数据使用AAC编码。

(3)将编码后的数据按MP4格式的要求,保存为MP4文件。

  同实现语音视频录制(demo源码)一样,我们仍然基于OMCS和MFile来实现上述功能,下面是对应的原理。

(1)在OMCS的结构中,客户端之间可以相互获取到对方的摄像头和麦克风的数据,所以,服务端可以作为一个虚拟的客户端用户(比如ID为“_Server”),连接到同一个进程中的OMCS多媒体服务器。

(2)在服务端动态创建DynamicCameraConnector组件,连接到指定用户的摄像头。

(3)在服务端动态创建两个MicrophoneConnector组件,接到指定用户的麦克风。

(4)调用DynamicCameraConnector的GetCurrentImage方法,即可获得所连接的摄像头采集的视频帧。

(5)预定MicrophoneConnector的AudioDataReceived事件,即可获得所连接的麦克风采集的音频数据。

(6)使用MFile将上述结果进行编码并写入mp4文件。

二.实现代码

 

  如果熟悉OMCS和MFile的使用,理解上面的代码是非常容易的,而且本文这个Demo就是在语音视频入门Demo的基础上改写而成的,只是有几点是需要注意:

(1)由于在服务端录制时,不需要显示被录制用户的视频,所以不用设置DynamicCameraConnector的Viewer(即不用调用其SetViewer方法来设置绘制视频的面板)。

(2)同样,在服务端录制时,不需要播放被录制用户的语音,所以,将MicrophoneConnector的Mute属性设置为true即可。

(3)如果需要录制视频,则通过一个定时器(videoTimer)每隔100毫秒(即10fps)从DynamicCameraConnector采集一帧图片,并写入录制文件。

(4)如果录制的仅仅是图像视频(不包括音频),采用的视频编码仍然为H264,但生成的录制文件也是.mp4文件,而非.h264文件,否则,生成的视频文件将无法正常播放。

三.Demo下载

RecordOnServerDemo.rar   

  服务端运行起来的截图如下所示:

  

  测试时,可按如下步骤:

(1)启动demo的服务端。

(2)修改客户端配置文件中的服务器IP,然后,用不同的帐号在不同的机器上登录多个demo的客户端。

(3)在服务端界面上,选择一个在线的用户,点击“开始录制”按钮,即可进行录制。录制结束后,将在服务端的运行目录下,生成以用户ID为名称的mp3/mp4文件。

  当然,在运行该demo时,仍然可以像语音视频入门Demo一样,两个客户端之间相互视频对话,而且同时,在服务端录制其中一个客户端的视频。

  如你所想,我们可以将这个demo稍微做些改进,就可以支持在服务端同时录制多个用户的语音视频。

  然而,就像本文开头所说的,本Demo所展示的功能非常适合在类似网络培训的系统中,用于录制老师的语音/视频。但如果是在视频聊天系统中,需要将聊天双方的语音视频录制到一个文件中,那么,就要复杂一些了,那需要涉及到图像拼接技术和混音技术了。我会在下篇文章中介绍另一个Demo,它就实现了这样的目的。

时间: 2024-10-25 14:40:51

在服务器端录制语音视频的相关文章

OMCS ——卓尔不群的网络语音视频框架

作为.NET平台上的开发人员,要开发出一个像样视频聊天系统或视频会议系统,非常艰难,这不仅仅是因为.NET对多媒体的支持比较有限,还因为网络语音视频这块涉及到了很多专业方面的技术,而.NET在这些方面的沉淀更是稀少.OMCS的出现将使得这一状况完全改观,它把所有底层的.复杂的.繁琐的细节都封装在了内部,提供给您一个易用而又强大的接口. OMCS网络语音视频框架是集成了语音.视频.远程桌面.电子白板等多种媒体于一身的网络多媒体框架,实现了多媒体设备[麦克风.摄像头.桌面.电子白板]的采集.编码.网

C#实现语音视频录制 【基于MCapture + MFile】

在上一篇使用C#采集语音视频.屏幕桌面[基于MCapture组件]的文章中,我们已经可以采集到语音.视频.桌面数据了,那么,接下来我们再结合MFile的录制功能,便能把这些数据写到文件中,生成标准的mp4文件. 使用MCapture+MFile,我们可以实现以下类似的应用: (1)录制课件:录制屏幕桌面+语音. (2)录制自己的MV:录制摄像头视频+语音. (3)录制教学视频:录制桌面+自己的视频+语音.(其中将桌面与自己视频叠加在一起) 那接下来这篇文章将详细介绍应用(2)的实现,我们做一个简

涉江采芙蓉——语音视频采集详解(源码赠送)

对于OMCS而言,采集是第一个环节.所谓“巧妇难为无米之炊”,首先我们要从多媒体设备上拿到第一手材料.对于音频而言,就是要从麦克风.声卡等设备获取到音频信号:对于视频而言,就是要从显示器.摄像头等设备获取到图像信息.如何获取到这些信息呢?于是我们需要采集. 所谓采集又可以拆分成采样和集聚两个步骤来理解.这就好比“曹聪称象”,先将大的总体分解成一个个样本,再将分解得到的样本整合起来,其思想无非就是用样本来模拟总体.  (1)对于视频而言,采集的过程就如同下图所示 我们知道,视频总是连续的,但是我们

涉江采芙蓉——语音视频采集概说(源码赠送)

采集是第一个环节.所谓“巧妇难为无米之炊”,首先我们要从多媒体设备上拿到第一手材料.对于音频而言,就是要从麦克风.声卡等设备获取到音频信号:对于视频而言,就是要从显示器.摄像头等设备获取到图像信息.如何获取到这些信息呢?于是我们需要采集. 所谓采集又可以拆分成采样和集聚两个步骤来理解.这就好比“曹聪称象”,先将大的总体分解成一个个样本,再将分解得到的样本整合起来,其思想无非就是用样本来模拟总体.  (1)对于视频而言,采集的过程就如同下图所示 我们知道,视频总是连续的,但是我们可以将其分解为一张

独家揭秘语音视频聊天室开发顶尖制作教程

互联网的不断发展,各种新技术的兴起,原本做管理软件 的我也逐渐转向从事着互联网相关的运营产品的开发.尤其是目前抄得最火热的音视频互动平台技术,今天我先列出最基本开发流程,适用于开发视频会议系统.语音视频聊天室系统.远程教育平台以及即时通讯平台(IM)等.希望对喜欢这方面的朋友有所帮助.同时欢迎各大高手参与讨论,相互交流.学习. 首先,知其然,先看看如何开始工作. 一.初始化 该部分是首先要完成的,包括设置对应的回调函数.设置SDK组件路径.设置是否产生日志文件等,通常初始化的代码如下(C++):

使用C#采集语音视频、屏幕桌面【基于MCapture组件】

在多媒体系统中,一般都会涉及到语音.视频.桌面的数据采集问题,采集得到的数据可以用来传输.播放.或存储.所以,对于像课件录制系统.语音视频录制系统.录屏系统等,多媒体数据的采集就是最基础的功能之一. MCapture可用于采集本地摄像头拍摄到的图像.麦克风输入的声音.以及当前电脑桌面的图像. 一.MCapture 简介 MCapture 组件内部的核心技术包括以下3点: (1)摄像头采集:可指定摄像头的索引.摄像头视频的分辨率.采集的帧频. (2)麦克风采集:可指定麦克风的索引.默认采样参数为

公司局域网实现语音视频聊天

随着全球信息化进程的不断发展,越来越多的企业使用局域网来管理各种事务.但随着局域网的机器增多,软件的应用对局域网的信息吞吐.处理能力的要求也越高.为解决上述矛盾,就有必要设计一个在局域网里的ICQ,国内拥有领先音视频通讯技术的佰锐科技十年专注于"AnyChat"音视频开发平台,通过采用先进的H.264视频编解码技术和AAC音频编解码技术,改善P2P数据传输技术.通过该系统,进行文件传输,消息的发布,提高企业的工作效率. AnyChat音视频开系统基于TCP/IP网络协议,采用C/S模式

Android多媒体-MediaRecorder 录制音视频

不多说,直接上代码,有详细注释 MyAudioRecord.java import java.io.File; import java.io.IOException; import android.app.Activity; import android.content.ContentValues; import android.content.Intent; import android.media.MediaPlayer; import android.media.MediaRecorder

开源语音视频聊天软件对比

谷歌在2011年推出了开源的语音视频聊天软件WebRTC,并准备将这款功能类似Skype.Facetime的软件集成到Chrome浏览器中. 目前,互联网的音频.视频通信服务技术一般都是私有技术,需要通过安装插件或桌面客户端来实现通信功能.但谷歌希望能够直接在浏览器中创建视频或语音聊天应用,这也是谷歌此次将WebRTC开源出来的原因.这很可能是未来语音和视频领域的Web应用趋势.下面介绍在全球品牌谷歌的WebRTC音视频和国内先进技术的AnyChat音视频平台进行对比分析: 关于WebRTC W