.net8使用Accord.Video.FFMPEG将相机捕获的帧保存为视频

本文讲述了作者在从.NETFramework迁移到.NET8后,遇到AForge.Video.FFMPEG报错的问题,通过尝试Accord.Video.FFMPEG并处理DLL引用,最终成功解决视频流获取和录制的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用了AForge.net调用摄像头获取视频流,一开始用AForge.Video.FFMPEG一直报错,网上的各种方法都试过了没用。其实之前在.NETFramework已经用过AForge.Video.FFMPEG了可以使用,但是框架换成.net8后就一直不行。看到网上说可以换成Accord.Video.FFMPEG,试了下从nuget下载包后包管理器根本定位不到Accord.Video.FFMPEG的dll,于是手动浏览添加引用。Accord.Video.FFMPEG依赖Accord和Accord.Video,这两个也必须手动浏览添加dll且三个包使用的目标框架要保持一致要不然还是会出错,我使用的都是net462文件夹下的dll。这么一顿操作下来不再报错,成功运行。Accord.Video.FFMPEG使用的时x64版本

System.IO.FileNotFoundException HResult=0x80070002 Message=Could not load file or assembly 'Accord.Video.FFMPEG, Version=3.8.0.0, Culture=neutral, PublicKeyToken=fa1a88e29555ccf7'. 系统找不到指定的文件。

 

            string fileName = $"{DateTime.Now.ToString("yyyyMMddhhmmssffff")}";
            string videoName = $"{videoPath}{fileName}.MP4";
            isStartVideo = true;


            videoWriter = new Accord.Video.FFMP
async openDialog () { console.log(this.objFormData, '编辑信息') // 获取所有案由的违规条款选项和依据数据 const optionsMap = new Map() const basisMap = new Map() await Promise.all(this.objFormData.accordList.map(async accord => { // console.log(accord, '打印') const { data: optionData } = await getLawRules(accord.violationAccord) optionsMap.set(accord.violationAccord, lawTreeFilter(optionData)) basisMap.set(accord.violationAccord, accord.accordBasis) })) // 处理条例数据 const gistList = [] for (const accord of this.objFormData.accordList) { accord.accordDetail.forEach(item => { let labels = item.violationClause.split("-").map(str => str.trim()).filter(Boolean) // console.log(labels, 'labels') const illegalOptions = accord.illegalOptions || optionsMap.get(accord.violationAccord) const ruleIdList = [] let options = illegalOptions for (const label of labels) { const option = options.find(opt => opt.label === label) if (option) { ruleIdList.push(option.value) options = option.children } } // console.log(ruleIdList,'ruleIdList') // console.log(options,'options') // 添加选择的数据到数组中 // const selectedData = { // violationAccord: accord.violationAccord, // violationAccordText: accord.violationAccordText, // illegalValue: ruleIdList // } // gistList.push(selectedData) // 添加数据到回显数据中 const elRuleList = [{ illegalValue: ruleIdList }]; console.log(elRuleList,'hhhhhh') const echoData = { gistValue: accord.violationAccordText, ruleList: elRuleList, illegalOptions: illegalOptions, basis: basisMap.get(accord.violationAccord) } this.gistList.push(echoData) }) } },这个方法中,这个 accord.violationAccordText值相等的把他们对应的elRuleList这个值放到一个ruleList里面
05-27
好的,你可以使用 Map 数据结构来处理相同 violationAccordText 值的情况,将 echoData 存储在 Map 中,以 violationAccordText 作为键名。如果已经存在相同键名的数据,则将其 elRuleList 值合并到已存在数据的 ruleList 中。可以参考下面的代码: ``` async openDialog() { console.log(this.objFormData, "编辑信息"); const optionsMap = new Map(); const basisMap = new Map(); await Promise.all( this.objFormData.accordList.map(async (accord) => { const { data: optionData } = await getLawRules(accord.violationAccord); optionsMap.set(accord.violationAccord, lawTreeFilter(optionData)); basisMap.set(accord.violationAccord, accord.accordBasis); }) ); const echoDataMap = new Map(); for (const accord of this.objFormData.accordList) { accord.accordDetail.forEach((item) => { const labels = item.violationClause .split("-") .map((str) => str.trim()) .filter(Boolean); const illegalOptions = accord.illegalOptions || optionsMap.get(accord.violationAccord); const ruleIdList = []; let options = illegalOptions; for (const label of labels) { const option = options.find((opt) => opt.label === label); if (option) { ruleIdList.push(option.value); options = option.children; } } const elRuleList = [{ illegalValue: ruleIdList }]; const echoData = { gistValue: accord.violationAccordText, ruleList: elRuleList, illegalOptions: illegalOptions, basis: basisMap.get(accord.violationAccord), }; if (echoDataMap.has(accord.violationAccordText)) { // 如果已经存在相同键名的数据,则将其 elRuleList 值合并到已存在数据的 ruleList 中 const existingEchoData = echoDataMap.get(accord.violationAccordText); existingEchoData.ruleList.push(...elRuleList); } else { echoDataMap.set(accord.violationAccordText, echoData); } }); } // 将 Map 中的数据转为数组 this.gistList = Array.from(echoDataMap.values()); }, ``` 希望这个修改能够帮到你。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值