首页 > 编程语言 >【C#】【FFmpeg】获取电脑可用音视频设备并输出到下拉列表框

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

时间:2022-10-18 10:12:29浏览次数:76  
标签:info 列表框 FFmpeg List Replace item using new 音视频

要使用的FFmpeg命令

image

ffmpeg -list_devices true -f dshow -i dummy

会输出的信息

image

image

通过正则取出设备名称

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)

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

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)
            {
                //等待完成
            }
            //处理文本
            info = info.Replace(" ", "");
            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();
            }
        }
    }
}

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

image

image

读取完成!

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

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

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

标签:info,列表框,FFmpeg,List,Replace,item,using,new,音视频
From: https://www.cnblogs.com/mllt/p/CSHAPE_FFMPEG_DEVICES.html

相关文章

  • FFmpeg中的音频文件的封装格式和编码格式
    1.FFmpeg的音频封装格式的学习MP3是我们在日常生活中最常见的音频格式之一,也是一种音频封装格式。1.1查看ffmpeg支持的封装的格式列表ffmpeg-formats|grepmp31.2ffpl......
  • 24_用Qt和FFmpeg实现简单的YUV播放器
    前面文章FFmpeg像素格式转换中我们使用FFmpeg实现了一个像素格式转换工具类,现在我们就可以在Qt中利用QImage很容易的实现一个简单的YUV播放器了。播放器功能很简单,只有播......
  • ffmpeg数据结构学习(AVpacket & AVframe)
     其中的AVBufferRef是一个AVbuffer的指针:图片来源于网络 关于AVframe:音频解码API avcodec_decode_audio4在新版中已废弃,替换为使用更为简单的avcodec_send_packet......
  • FFmpeg H265解码总结
    背景:项目开发需要,通过TCP协议与视频板进行通信,获取图像数据,对图像数据进行解码后显示。关键词:C#、FFmpeg、FFmpeg.AutoGen.dll、WriteableBitmap、H265、HEVC1.初设计......
  • 【音视频连载-003】基础学习篇-SDL 消息循环和事件响应
    公众号回复:OpenGL,领取学习资源大礼包音视频学习入门技术文章连载:​​技术开发故事会连载​​​​【音视频连载-001】基础学习篇-SDL介绍以及工程配置​​​​【音视频连载-......
  • 【音视频连载-006】基础学习篇-SDL 播放 YUV 视频文件
    公众号回复:OpenGL,领取学习资源大礼包音视频学习入门技术文章连载:​​技术开发故事会连载​​​​【音视频连载-001】基础学习篇-SDL介绍以及工程配置​​​​【音视频连载-......
  • 【音视频连载-005】基础学习篇-SDL 加载 YUV 文件并显示
    公众号回复:OpenGL,领取学习资源大礼包音视频学习入门技术文章连载:​​技术开发故事会连载​​​​【音视频连载-001】基础学习篇-SDL介绍以及工程配置​​​​【音视频连载-......
  • 【音视频连载-008】基础学习篇-SDL 播放 PCM 音频文件(下)
    公众号回复:OpenGL,领取学习资源大礼包音视频学习入门技术文章连载:​​技术开发故事会连载​​​​【音视频连载-001】基础学习篇-SDL介绍以及工程配置​​​​【音视频连载-......
  • 【音视频连载-004】基础学习篇-SDL 加载图片并显示
    公众号回复:OpenGL,领取学习资源大礼包音视频学习入门技术文章连载:​​技术开发故事会连载​​​​【音视频连载-001】基础学习篇-SDL介绍以及工程配置​​​​【音视频连载-......
  • 【音视频连载-009】第二季 FFmpeg 打造简易播放器
    公众号回复:OpenGL,领取学习资源大礼包音视频学习入门技术文章连载:​​技术开发故事会连载​​​​【音视频连载-001】基础学习篇-SDL介绍以及工程配置​​​​【音视频连载-......