C#实现语音视频录制 【基于MCapture + MFile】
2014-11-26 15:53
369 查看
在上一篇使用C#采集语音视频、屏幕桌面【基于MCapture组件】的文章中,我们已经可以采集到语音、视频、桌面数据了,那么,接下来我们再结合MFile的录制功能,便能把这些数据写到文件中,生成标准的mp4文件。
使用MCapture+MFile,我们可以实现以下类似的应用:
(1)录制课件:录制屏幕桌面+语音。
(2)录制自己的MV:录制摄像头视频+语音。
(3)录制教学视频:录制桌面+自己的视频+语音。(其中将桌面与自己视频叠加在一起)
那接下来这篇文章将详细介绍应用(2)的实现,我们做一个简单的Demo(文末有源码下载)。另外两种应用都可以在本文Demo的基础上作一些修改即可。Demo 运行的截图如下所示:
首先,当点击启动设备按钮时,我们创建一个摄像头采集器实例和一个麦克风采集器实例,并启动它们开始采集:
接下来,点击开始录制按钮时,我们初始化VideoFileMaker组件:
当想结束录制时,则调用Close方法:
Demo源码下载。
使用MCapture+MFile,我们可以实现以下类似的应用:
(1)录制课件:录制屏幕桌面+语音。
(2)录制自己的MV:录制摄像头视频+语音。
(3)录制教学视频:录制桌面+自己的视频+语音。(其中将桌面与自己视频叠加在一起)
那接下来这篇文章将详细介绍应用(2)的实现,我们做一个简单的Demo(文末有源码下载)。另外两种应用都可以在本文Demo的基础上作一些修改即可。Demo 运行的截图如下所示:
首先,当点击启动设备按钮时,我们创建一个摄像头采集器实例和一个麦克风采集器实例,并启动它们开始采集:
this.cameraCapturer = CapturerFactory.CreateCameraCapturer(0, new Size(int.Parse(this.textBox_width.Text), int.Parse(this.textBox_height.Text)), this.fps); this.cameraCapturer.ImageCaptured += new CbGeneric<Bitmap>(cameraCapturer_ImageCaptured); this.cameraCapturer.CaptureError += new CbGeneric<Exception>(cameraCapturer_CaptureError); this.microphoneCapturer = CapturerFactory.CreateMicrophoneCapturer(0); this.microphoneCapturer.AudioCaptured += new CbGeneric<byte[]>(microphoneCapturer_AudioCaptured); this.microphoneCapturer.CaptureError += new CbGeneric<Exception>(microphoneCapturer_CaptureError); //开始采集 this.cameraCapturer.Start(); this.microphoneCapturer.Start();
接下来,点击开始录制按钮时,我们初始化VideoFileMaker组件:
this.videoFileMaker = new VideoFileMaker(); this.videoFileMaker.AutoDisposeVideoFrame = true; this.videoFileMaker.Initialize("test.mp4", VideoCodecType.H264, int.Parse(this.textBox_width.Text), int.Parse(this.textBox_height.Text), this.fps, AudioCodecType.AAC, 16000, 1, true);
this.isRecording = true;参数中设定,使用h.264对视频进行编码,使用aac对音频进行编码,并生成mp4格式的文件。然后,我们可以通过OMCS获取实时的音频数据和视频数据,并将它们写到文件中。
void microphoneCapturer_AudioCaptured(byte[] audioData) //采集到的语音数据 { if (this.isRecording) { this.videoFileMaker.AddAudioFrame(audioData); } } //采集到的视频图像 void cameraCapturer_ImageCaptured(Bitmap img) { if (this.isRecording) { this.DisplayVideo((Bitmap)img.Clone()); this.videoFileMaker.AddVideoFrame(img); } else { this.DisplayVideo(img); } }
当想结束录制时,则调用Close方法:
this.videoFileMaker.Close(true);更多细节大家可以下载文末的源码研究,最后,有几点需要额外强调一下的:(1)摄像头采集的帧频最好与录制所设定的帧频完全一致。demo中是使用成员变量fps来表示的。(2)videoFileMaker的AutoDisposeVideoFrame属性要设置为ture,即尽快释放不再使用的视频帧,节省内存。(3)DisplayVideo方法使用的是采集视频帧的复制品,这是因为videoFileMaker不是同步写入的,而是先将帧放入队列,然后异步写入的。(4)DisplayVideo方法在使用完作为背景的视频帧后,也要尽快释放。道理同上。
Demo源码下载。
相关文章推荐
- C#实现语音视频录制-附demo源码
- C#实现语音视频录制-附demo源码
- 实现语音视频录制
- C#实现IVR(基于东进的语音卡)-2
- javaCV开发详解之2:推流器实现,推本地摄像头视频到流媒体服务器以及摄像头录制视频功能实现(基于javaCV-FFMPEG、javaCV-openCV)
- 实现语音视频录制(demo源码)
- c#基于udp实现的p2p语音聊天工具
- C#实现IVR(基于东进的语音卡)-2
- javaCV开发详解之2:推流器实现,推本地摄像头视频到流媒体服务器以及摄像头录制视频功能实现(基于javaCV-FFMPEG、javaCV-openCV)
- C#基于UDP实现的P2P语音聊天工具
- C#实现IVR(基于东进的语音卡)-4
- C#实现IVR(基于东进的语音卡)-5
- javaCV开发详解之3:收流器实现,录制流媒体服务器的rtsp/rtmp视频文件(基于javaCV-FFMPEG)
- C#调用FFMPEG实现桌面录制(视频+音频+生成本地文件)
- iOS 基于环信SDK实现即时通讯-语音、视频聊天
- 实现语音视频录制(demo源码)
- C#实现IVR(基于东进的语音卡)-3
- 实现语音视频录制(demo源码)
- 一行代码完成 调用系统相册 和 视频,语音库,选择图片,视频,和音频文件。在选择界面实现了录制视频和录制音频功能。 截图
- C#基于UDP实现的P2P语音聊天工具