【C#】【FFmpeg】获取电脑可用音视频设备并输出到下拉列表框

简介: 【C#】【FFmpeg】获取电脑可用音视频设备并输出到下拉列表框

【重要】不要边看文本边操作,本文由错误纠正,先看完一遍再说。

要使用的FFmpeg命令


q6.png

ffmpeg -list_devices true -f dshow -i dummy

会输出的信息

q5.png

q4.png

通过正则取出设备名称


List<string> videoList=new List<string>();
            foreach (Match item in Regex.Matches(this.info, "] \"(.*?)\" \\(video\\)"))
                videoList.Add(item.Value.Replace("]\"","").Replace("\"(video)", ""));
            List<string> audioList = new List<string>();
            foreach (Match item in Regex.Matches(this.info, "] \"(.*?)\" \\(audio\\)"))
                audioList.Add(item.Value.Replace("]\"", "").Replace("\"(audio)", ""));

1.完全不了解正则表达式的去看看https://www.runoob.com/csharp/csharp-regular-expressions.html

2.我本来想的是,加了括号(.*?),匹配出来的应该不包括 ]""(video)

3.注意符号之间的空格

如下图,是有空格的

q3.png

你要是空格没写或者写的不对,就取不出来了。

但是它又确实包括了,于是我只能使用替换的方式将我不要的内容给替换掉

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
namespace why_not_fly
{
    internal class MediaInfo
    {
        public string info = null;
        public string error = null;
        public bool isFinish = false;
        Media media = new Media();
        public List<List<string>> getDevices() {
            List<string> list = new List<string>() { "-list_devices true -f dshow -i dummy" };
            media.Start(list);
            media.process.ErrorDataReceived += new DataReceivedEventHandler(ProcessOutputHandler);
            while (!isFinish)
            {
                //等待完成
            }
            MessageBox.Show(info);
            List<string> videoList=new List<string>();
            foreach (Match item in Regex.Matches(this.info, "] \"(.*?)\" \\(video\\)"))
                videoList.Add(item.Value.Replace("] \"","").Replace("\" (video)", ""));
            List<string> audioList = new List<string>();
            foreach (Match item in Regex.Matches(this.info, "] \"(.*?)\" \\(audio\\)"))
                audioList.Add(item.Value.Replace("] \"", "").Replace("\" (audio)", ""));
            return new List<List<string>>() { videoList, audioList };
        }
        //设置回调,读取指令的返回值
        private void ProcessOutputHandler(object sendingProcess, DataReceivedEventArgs outLine)
        {
            try
            {
                //进程间通信,解决线程中调用控件错误
                Control.CheckForIllegalCrossThreadCalls = false;
                if (!String.IsNullOrEmpty(outLine.Data))
                {
                    info += outLine.Data + Environment.NewLine;
                }
                else
                {
                    isFinish = true;
                }
            }
            catch (Exception ex)
            {
                error = ex.ToString();
            }
        }
    }
}

然后准备两个下拉列表框,载入窗口的时候就读取设备信息

q2.png

q1.png

读取完成!

难点的话其实也就是正则表达式提取内容,只要内容能提取出来,那一切都比较好办了。

然后关于读取设备遇到乱码问题,请看【C#】【ffmpeg】外部调用线程执行ffmepg读取返回的信息乱码问题

我估计可能获取的这些信息还不够,后面再更新。

相关文章
|
10天前
|
Web App开发 5G Linux
FFmpeg开发笔记(四十四)毕业设计可做的几个拉满颜值的音视频APP
一年一度的毕业季来临,计算机专业的毕业设计尤为重要,不仅关乎学业评价还积累实战经验。选择紧跟5G技术趋势的音视频APP作为课题极具吸引力。这里推荐三类应用:一是融合WebRTC技术实现视频通话的即时通信APP;二是具备在线直播功能的短视频分享平台,涉及RTMP/SRT等直播技术;三是具有自定义动画特效及卡拉OK歌词字幕功能的视频剪辑工具。这些项目不仅技术含量高,也符合市场需求,是毕业设计的理想选择。
32 6
FFmpeg开发笔记(四十四)毕业设计可做的几个拉满颜值的音视频APP
|
1月前
|
达摩院 语音技术 异构计算
语音识别-免费开源的语音转文本软件Whisper的本地搭建详细教程,python版本是3.805,ffmpeg是专门处理音视频的,ffmpeg的下载链接,现在要求安装python和ffmpeg
语音识别-免费开源的语音转文本软件Whisper的本地搭建详细教程,python版本是3.805,ffmpeg是专门处理音视频的,ffmpeg的下载链接,现在要求安装python和ffmpeg
|
2月前
|
Web App开发 移动开发 编解码
FFmpeg开发笔记(三十二)利用RTMP协议构建电脑与手机的直播Demo
本文讨论了实时数据传输在互联网中的重要性,如即时通讯和在线直播。一对一通信通常使用WebRTC技术,但一对多直播需要流媒体服务器和特定协议,如RTSP、RTMP、SRT或RIST。RTMP由于其稳定性和早期普及,成为国内直播的主流。文章通过实例演示了如何使用OBS Studio和RTMP Streamer进行RTMP推流,并对比了不同流媒体传输协议的优缺点。推荐了两本关于FFmpeg和Android开发的书籍以供深入学习。
38 0
FFmpeg开发笔记(三十二)利用RTMP协议构建电脑与手机的直播Demo
|
2月前
|
存储 编解码 Linux
rodert教你学FFmpeg实战这一篇就够了 - 音视频处理入门篇
rodert教你学FFmpeg实战这一篇就够了 - 音视频处理入门篇
39 1
|
1月前
|
C#
C#进程调用FFmpeg操作音视频
因为公司需要对音视频做一些操作,比如说对系统用户的发音和背景视频进行合成,以及对多个音视频之间进行合成,还有就是在指定的源背景音频中按照对应的规则在视频的多少秒钟内插入一段客户发音等一些复杂的音视频操作。本篇文章主要讲解的是使用C#进程(Process)调用FFmpeg.exe进行视频合并、音频合并、音频与视频合并成视频这几个简单的音视频操作。
|
3月前
|
存储 缓存 调度
FFmpeg开发笔记(十九)FFmpeg开启两个线程分别解码音视频
《FFmpeg开发实战》第10章示例playsync.c在处理音频流和视频流交错的文件时能实现同步播放,但对于分开存储的格式,会出现先播放全部声音再快速播放视频的问题。为解决此问题,需改造程序,增加音频处理线程和队列,以及相关锁,先将音视频帧读入缓存,再按时间戳播放。改造包括声明新变量、初始化线程和锁、修改数据包处理方式等。代码修改后在playsync2.c中,编译运行成功,控制台显示日志,SDL窗口播放视频并同步音频,证明改造有效。
59 0
FFmpeg开发笔记(十九)FFmpeg开启两个线程分别解码音视频
|
3月前
|
编解码 安全 计算机视觉
FFMPEG常用命令 音视频合并
FFMPEG常用命令 音视频合并
73 2
|
3月前
|
Web App开发 编解码 vr&ar
使用FFmpeg从音视频处理到流媒体技术的探索和实战应用
使用FFmpeg从音视频处理到流媒体技术的探索和实战应用
163 2
|
3月前
|
监控 安全 C#
开发公司电脑监控软件的报警系统:一个C#示例
在当今数字化时代,企业对其计算机网络和系统的安全性和稳定性越来越重视。为了确保员工遵守公司政策、保护机密信息以及监控系统的正常运行,开发一种可靠的公司电脑监控软件变得至关重要。本文将介绍如何使用C#编写一个简单而有效的报警系统,以便监控关键数据并在必要时发出警报。
119 0
|
3月前
|
存储 编解码 缓存
ffmpeg音视频同步
ffmpeg音视频同步
74 0