DxPackNet 4.保存音视频为本地avi文件

Stella981
• 阅读 469

捕获到了音视频后要保存到本地文件,这是很常见的应用场景,DxPackNet保存视频文件也比较简单

用 IAviStreamWriter  avi文件写入流即可

1.初始化相关设备,设定好数据捕获的回调函数

        DxDeviceCollection cameras;
        IDxCameraCapture camCapture;
        IDxMicrophCapture microphone;
        IAviStreamWriter aviWriter;
        private void Form1_Load(object sender, EventArgs e)
        {
            cameras = DxFactory.CreateDxCompent<DxDeviceCollection>(DxDeviceCollection.ENVIRONMENT_CAMERAS);
            camCapture = DxFactory.CreateDxCompent<IDxCameraCapture>(this, panel1);
            camCapture.FrameCb = camerasFrameCb;
            camCapture.Init(cameras[0]);
            microphone = DxFactory.CreateDxCompent<IDxMicrophCapture>(100);
            microphone.AudioCb = auCaptureBufferCB;
        }

2.创建avi写入流 打开设备

        private void button1_Click(object sender, EventArgs e)
        {
            button1.Enabled = false;
            //创建avi文件写入流 第一个参数为-写入文件路径  第二个参数为-是否支持音频写入,true为音/视频,false为只写视频
            aviWriter = DxFactory.CreateDxCompent<IAviStreamWriter>("c:\\avicaptest.avi", true);
            aviWriter.Width = 640;//设置视频宽度
            aviWriter.Height = 480;//设置视频高度
            aviWriter.CompressType = AviVideoCompressType.MicrosoftVideo1; //设置视频压缩格式
            aviWriter.Open();//打开写入流
            microphone.Open();
            microphone.Start();
            camCapture.Run();
        }

3.在回调中写入音/视频 数据

        private void auCaptureBufferCB(byte[] buffer, int length)
        {
            //写入音频数据 
            aviWriter.WriteWavBuffer(buffer, length);  
        }
        private void camerasFrameCb(byte[] buffer, int size)
        {
            //写入视频数据
            aviWriter.WriteBmpBuffer(buffer, Math.Max(size, 640 * 480 * 3));
        }

        private void button2_Click(object sender, EventArgs e)
        {
            button2.Enabled = false;
            microphone.Stop();
            camCapture.Stop();
            aviWriter.Dispose();//写入完了记得关闭流
            aviWriter = null;
        }
点赞
收藏
评论区
推荐文章
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Easter79 Easter79
3年前
spring代码异常捕获到logback logging.config=logback
在spring中使用logging.configlogbackspring.xml将日志转存到了文件中。但是代码中的捕获的异常无法用e.printStackTrace打印到文件中。使用如下方法打印:main:catch(Exceptione){log.error("xxx",e);}这里可以重新定
Stella981 Stella981
3年前
FFmpeg命令行工具学习(四):FFmpeg 采集设备
在使用FFmpeg作为编码器时,可以使用FFmpeg采集本地的音视频采集设备的数据,然后进行编码、封装、传输等操作。例如,我们可以采集摄像头的图像作为视频,采集麦克风的数据作为音频,然后对采集的音视频数据进行编码,最后将编码后的数据封装成多媒体文件或者作为音视频流发送到服务器上(流媒体)。出于硬件环境和篇幅的限制,本文主要讲的时Mac平台下通过F
Wesley13 Wesley13
3年前
go保存文件到指定的文件夹
框架:gin语言:golang作用:保存文件到本地指定文件夹的一个小demo单文件保存到本地指定目录:packagemainimport("fmt""log""net/http""path""github.com/gingon
Stella981 Stella981
3年前
Git 使用方法
仓库的两种初始化方式1.方式新建包含文件的云端仓库,就叫做云端仓库被初始化了接着拉取到本地最后把修改后的'本地仓库'数据推送到云端2.方式新建'空云端'仓库,云端仓库没有文件数据接着初始化本地仓库然后推送到云端差别在新建云端仓库时是否勾选加入了模板文件例如README.md没有勾选任何文件的话
Wesley13 Wesley13
3年前
MySQL数据库的安装和配置
MySQL数据库的安装和配置1、数据库概念​数据库就是保存数据的地方,在没有数据库之前,我们是这样保存数据的:​1.随意的存到了一个文件中数据格式也是千差万别的​2.软件开发目录规范​规定了数据存放的位置ps:数据都是保存在本地的2、数据库如何保存数据的?
Wesley13 Wesley13
3年前
E212:无法打开并写入文件
在Linux下用vim敲入:wq退出保存时,出现E212:无法打开并写入文件的错误提示。这是由于在该目录下当前用户没有写权限导致。解决办法如下:【1】将文件保存到用户目录下,再改变所有者,然后移动到配置目录下,步骤如下:1)保存退出时用 :wq!~/tmp/file.conf2)su切换到root用户,将file.conf
Stella981 Stella981
3年前
Runtime快游戏调用copyfile接口写临时文件踩坑记录
问题描述:调用copyfile接口将临时文件写入到缓存报错“nosuchfileordirectory”。问题分析:如果调用copyfile接口使用的源文件是临时文件,则该接口目前不支持此场景,需要使用save接口先将临时文件保存到本地,然后再调用copyfile接口。解决方法:var
绣鸾 绣鸾
1年前
VideoProc Converter 4K for mac(视频转换软件) v 6.0
是一款功能强大的视频转换工具,它可以将各种常见格式的视频文件(如MP4、AVI、MOV等)快速转换为高质量的4K、1080p、720p或其他分辨率的视频文件。以下是VideoProcConverter4K的一些特点:高速转换:VideoProcConver
如何解决 Web 音视频本地回声问题?
回声问题产生的原因,一般是由于本地麦克风采集的声音通过声音外放设备在当前环境中输出,被麦克风重复采集造成。为避免回声,建议在处理本地音视频时,不要播放本地采集的音频,仅做视频展示即可。