AForge.NET
AForge.NET
http://accord-framework.net/intro.html
https://cloud.tencent.com/developer/ask/sof/105550562
本文介绍如何快速地将腾讯云 TRTC SDK(Windows C#)集成到 C# 项目中
https://cloud.tencent.cn/document/product/647/32178
https://github.com/accord-net/framework/releases
Demo示例:推流本地摄像头、麦克风、桌面、声卡
https://blog.oraycn.com/NPusher.aspx
using System; using System.Drawing; using Accord.Video.FFMPEG; using Accord.Audio; using Accord.Audio.Formats; class Program { static void Main(string[] args) { // 创建视频捕获器,这里以摄像头为例 var videoCapture = new VideoCaptureDevice(0); // 创建音频捕获器,这里以麦克风为例 var waveIn = new WaveIn(); waveIn.DataAvailable += (sender, stream) => { // 这里可以处理音频数据 }; // 开始捕获视频和音频 videoCapture.NewFrame += (sender, frame) => { // 处理视频帧 }; waveIn.StartRecording(); videoCapture.Start(); // 假设用户按下某键或者某个条件满足后,停止捕获 // ... waveIn.StopRecording(); videoCapture.Stop(); // 假设有一个方法将视频帧转换为图像 // 这里省略帧到图像的转换代码 // 假设videoFrames包含了所有转换后的图像 var videoFrames = ...; // 将视频帧和音频数据合成MP4文件 var outputFile = "output.mp4"; var audioFormat = new WaveFormat(44100, 16, 2); // 假设waveIn的格式是这个 var videoEncoder = new AviVideoEncoder(new VideoEncodingOptions() { FramesPerSecond = 30, VideoCodec = VideoCodecs.X264, VideoBitrate = 1000, }); using (var writer = new MediaWriter(outputFile, videoEncoder, audioFormat)) { foreach (var frame in videoFrames) { writer.WriteVideoFrame(frame); } // 写入音频数据 byte[] buffer = waveIn.RecordedBytes; writer.WriteAudioFrame(buffer, 0, buffer.Length); } Console.WriteLine("视频和音频合成完成。"); } }