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

Stella981
• 阅读 158

捕获到了音视频后要保存到本地文件,这是很常见的应用场景,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个月前
css问题
1、在IOS中图片不显示(给图片加了圆角或者img没有父级)<div<imgsrc""/</divdiv{width:20px;height:20px;borderradius:20px;overflow:h
晴空闲云 晴空闲云
4个月前
css中box-sizing解放盒子实际宽高计算
我们知道传统的盒子模型,如果增加内边距padding和边框border,那么会撑大整个盒子,造成盒子的宽度不好计算,在实务中特别不方便。boxsizing可以设置盒模型的方式,可以很好的设置固定宽高的盒模型。盒子宽高计算假如我们设置如下盒子:宽度和高度均为200px,那么这会这个盒子实际的宽高就都是200px。但是当我们设置这个盒子的边框和内间距的时候,那
艾木酱 艾木酱
3个月前
快速入门|使用MemFire Cloud构建React Native应用程序
MemFireCloud是一款提供云数据库,用户可以创建云数据库,并对数据库进行管理,还可以对数据库进行备份操作。它还提供后端即服务,用户可以在1分钟内新建一个应用,使用自动生成的API和SDK,访问云数据库、对象存储、用户认证与授权等功能,可专
Wesley13 Wesley13
1年前
go保存文件到指定的文件夹
框架:gin语言:golang作用:保存文件到本地指定文件夹的一个小demo单文件保存到本地指定目录:packagemainimport("fmt""log""net/http""path""github.com/gingon
Stella981 Stella981
1年前
Git的操作
第一部分:基础操作1.跳转到制定目录: cd/e/workFile/gitTest/2.初始化本地仓库: gitinit3.查看本地仓库状态: gitstatus4.新建文件夹: mkdirtest5.新建文件: touchtest.txt6.删除文件: gitrmtest
Wesley13 Wesley13
1年前
MySQL数据库的安装和配置
MySQL数据库的安装和配置1、数据库概念​数据库就是保存数据的地方,在没有数据库之前,我们是这样保存数据的:​1.随意的存到了一个文件中数据格式也是千差万别的​2.软件开发目录规范​规定了数据存放的位置ps:数据都是保存在本地的2、数据库如何保存数据的?
Stella981 Stella981
1年前
AVAssetExportSession 音视频的剪辑,以及格式的装换
//第一种方式//asset生成必须为文件的url,而且是本地AVAsset\mediaAsset\_player.currentItem.asset;//AVMutableComposition可以进行音视频的组合AVAssetExportSession\es\\AVAssetExportSessio
helloworld_28799839 helloworld_28799839
4个月前
常用知识整理
Javascript判断对象是否为空jsObject.keys(myObject).length0经常使用的三元运算我们经常遇到处理表格列状态字段如status的时候可以用到vue
十月飞翔 十月飞翔
8个月前
Docker -- 将容器打包成新镜像,将镜像打包成文件和加载镜像包
1.保存容器为新镜像  命令:dockercommitm“”a“”CONTAINERID给新的镜像命名dockercommita"runoob.com"m"myapache"a404c6c174a2bb:v12.保存镜像为文件  命令:dockersaveo要保存的文件名要保存的镜像例子:root@iZbp
十月飞翔 十月飞翔
9个月前
Docker -- 将容器打包成新镜像,将镜像打包成文件和加载镜像包
1.保存容器为新镜像  命令:dockercommitm“”a“”CONTAINERID给新的镜像命名dockercommita"runoob.com"m"myapache"a404c6c174a2bb:v12.保存镜像为文件  命令:dockersaveo要保存的文件名要保存的镜像例子:root@iZbp