400-123-4657
行业资讯
您当前的位置: 首页 > 新闻动态 > 行业资讯

MFile组件助力语音视频录制:实现高效编码与文件保存

时间:2025-02-16

MFILE组件(oraycn.mfile.dll)是Auri实用组件之一。它可以以指定格式编码原始语音数据和视频数据,并将其写入视频文件(例如.mp4)。

1。命运的起源

最近在一个在线招聘平台项目的工作,该项目具有这样的模块,候选人可以通过系统客户端记录自己的视频(自我引入),以将其上传到服务器,然后招聘人员将在右边浏览时间。这些候选人的视频。该模块中涉及的主要技术是语音和视频录制技术,它需要编码和写入.mp4文件,以获取从麦克风收集的语音数据以及从相机收集的视频数据。

要完成这些功能,具体来说,需要解决以下技术问题:

(1)麦克风数据收集

(2)相机数据采集

(3)音频数据编码

(4)视频数据编码

(5)以.mp4文件格式将编码的数据写入文件容器中。

(6)确保音频和视频播放的同步。

2。演示实施

从头开始逐步解决这些问题将是一个非常困难的挑战。幸运的是,我们可以通过现有组件的结合来实现这些功能。我们可以在OMCS框架的帮助下完成语音和视频数据的集合,以及随后的语音和视频编码和生成MP4文件,我们可以在MFILE组件的帮助下完成。有关更方便的解释,在这里我们将提供一个特定的演示,该演示可以记录从本地摄像机和本地麦克风收集的数据并生成MP4文件。演示运行的屏幕截图如下:

接下来,让我们谈谈如何在此演示中逐一解决上述问题。

1。语音数据收集

我们可以使用OMCS的麦克相关组件连接到我们自己的麦克风设备,以便扬声器播放收集的语音,我们可以通过通过ImultimediaManager暴露的AudioPlayed事件捕获播放语音数据。

2。视频数据获取

同样,我们可以使用相机控制控制器连接到自己的相机设备,然后计时器每100ms(假设帧速率为10fps)调用其getCurrentimage方法以获取绘制位图。

3。下一步

可以将以下4个步骤移交给MFILE组件。让我们看一下MFILE组件中视频制造商类的签名,并知道该怎么做:

MFILE结构

对于用户,MFILE组件中主要类的结构图如下:

其中,AudioFileMaker用于生成音频文件,使用SilenceVideFileMaker来生成无声的视频文件,并使用VideofileMaker来生成带有声音和图像的普通视频文件。这三个类均从基类的基地制造商继承,它们的用法是相同的。接下来,我们只能详细解释视频制造商类的使用,并可以比较SilenceVideFilemaker和AudioFileMaker的使用方法。

以下是视频制造商类的公共方法的签名

代码如下:

 public class VideoFileMaker :IDisposable
 {
  /// 
  /// 初始化视频文件。
   /// 
  /// 文件路径
  /// 视频编码格式
  /// 视频宽度
  /// 视频高度
  /// 帧频
  /// 音频编码格式
  /// 音频采样率。【注:采样位数必须为16位】
  /// 声道数
  /// 如果是实时录制,则可传入true,以音频为基准进行同步。
  void Initialize(string filePath, VideoCodecType videoCodec, int videoWidth, int videoHeight, int videoFrameRate, AudioCodecType audioCodec, 
      int audioSampleRate, int audioChannelCount, bool autoSyncToAudio);
  /// 
  /// 添加音频帧。
  ///   
  void AddAudioFrame(byte[] audioframe);
  /// 
  /// 添加视频帧。如果autoSyncToAudio开启,则自动同步到音频。
  ///   
  void AddVideoFrame(Bitmap frame);
  /// 
  /// 添加视频帧。
  /// 
  /// 视频帧
  /// 离开始时的时间长度  
  void AddVideoFrame(Bitmap frame, TimeSpan timeStamp);
  /// 
  /// 关闭视频文件。
  /// 
  /// 如果还有帧等待写入文件,是否等待它们全部写入文件。
  void Close(bool waitFinished);
 }

首先,调用初始化方法以完成初始化,然后循环调用Addaudioframe和AddVideOframe方法。视频录制完成后,请致电Close方法,然后进行操作。非常简单,不是吗?

4。主代码

首先,我们以AA01用户登录到OMCS服务器,然后将摄像头控制器控件和麦克索开机组件拖动到主形式,然后将它们连接到自己的相机和麦克风。

this.multimediaManager = MultimediaManagerFactory.GetSingleton();   
 this.multimediaManager.Initialize("aa01", "", "127.0.0.1", 9900);
 this.cameraConnector1.BeginConnect("aa01");
 this.microphoneConnector1.BeginConnect("aa01");

接下来,我们初始化Videofilemaker组件:

 this.videoFileMaker.Initialize("test.mp4", VideoCodecType.H264, this.multimediaManager.CameraVideoSize.Width, this.multimediaManager.CameraVideoSize.Height, 10, AudioCodecType.AAC, 16000, 1, true);
 this.timer = new System.Threading.Timer(new System.Threading.TimerCallback(this.Callback), null ,0, 100);
 this.multimediaManager.AudioPlayed += new ESBasic.CbGeneric(multimediaManager_AudioPlayed); 

在参数中设置,使用H.264来编码视频,使用AAC来编码音频,并以MP4格式生成文件。然后,我们可以通过OMC获得实时音频和视频数据,然后将其写入文件。

 void multimediaManager_AudioPlayed(byte[] audio)
 {
  this.videoFileMaker.AddAudioFrame(audio);
 }
 private void Callback(object state)
 {
  Bitmap bm = this.cameraConnector1.GetCurrentImage();
  this.videoFileMaker.AddVideoFrame(bm);
 }

当您想结束录制时,请致电关闭方法:

this.videoFileMaker.Close(true); 

这样,可以直接使用我们的QQ音频或Storm Audio播放生成的test.mp4文件。

地址:广东省广州市天河区88号   电话:400-123-4657   传真:+86-123-4567
版权所有:Copyright © 2002-2025 尊龙真人官网 版权所有 非商用版本      ICP备案编号:粤IP**********
尊龙凯时人生就是博·(中国区)官方网站