- 博客(173)
- 资源 (47)
- 收藏
- 关注
原创 c语言 实现跨平台本地日志
本文介绍了一个轻量级跨平台日志模块的实现方案。该模块仅需一个.c文件,支持多级日志输出(DEBUG/INFO/WARN/ERROR等),具备文件切割(默认10MB)和历史文件清理功能(保留10个文件)。通过宏定义区分不同平台,采用缓存写入机制提高性能(WARN及以下等级异步写入,ERROR及以上等级同步写入)。核心功能包括:1)跨平台文件操作封装;2)日志缓存管理;3)按大小自动切割文件;4)历史日志清理。模块使用简单,只需包含头文件即可通过宏(如LOG_INFO)输出日志,适合嵌入式或资源受限场景使用。
2026-02-03 15:20:25
839
原创 flutter-elinux 编译linux arm64程序
本文介绍了在嵌入式Linux系统中运行Flutter应用的方法。通过使用官方Flutter SDK或第三方flutter-elinux工具,可以生成支持多种后端(X11、Wayland等)的ARM64程序。文章详细讲解了本地编译运行、交叉编译的步骤,并提供了常见问题的解决方案。重点指出无需自行生成engine和embedded,只需flutter-elinux+clang+sysroot即可完成编译。最后总结了编译过程中的关键点和注意事项,为开发者提供了实用指引。
2026-01-07 12:41:44
723
原创 c语言 利用宏实现函数重载
本文介绍了一种在C语言中通过宏实现函数重载的方法。该方法利用宏参数个数来区分不同函数版本,分别针对MSVC和GCC等编译器提供了不同的宏定义方案。具体实现包括基础宏定义、函数定义、重载宏定义及调用示例。虽然不同编译器需要不同的实现方式,但这种方法能够稳定实现简单的函数重载功能,为C语言编程提供了一定便利性。未来可能进一步优化MSVC编译器的宏实现。
2026-01-06 17:52:22
1060
原创 c语言 实现切片数组-拓展队列操作
本文介绍了基于C语言实现的集合类,重点阐述了如何在切片基础上实现队列功能。通过采用循环队列结构优化性能,避免了直接删除头部元素导致的内存拷贝问题。文章提供了关键接口设计,包括slice_remove、slice_set和slice_get等宏定义,使单个对象能够支持切片、栈和队列三种数据结构。完整代码展示了slice.h头文件的实现细节,包含创建切片、添加/移除元素、设置/获取元素值等核心功能。该实现兼顾了性能与功能需求,为C语言开发者提供了高效的数据结构解决方案。
2026-01-06 16:40:41
839
原创 C++ 实现ffmpeg解析hls fmp4 EXT-X-DISCONTINUITY并支持定位
摘要 本文介绍了使用FFmpeg处理HLS FMP4流时遇到的定位问题及解决方案。当M3U8文件中存在不连续片段(如广告)或编码参数不一致时,FFmpeg 8.0版本仍会出现定位失效。文中提出通过自行解析M3U8文件,利用AVIO接口将FMP4的init和m4s片段拼接后提供给FFmpeg解复用的方法。具体实现包括:1) 使用FFmpeg的HTTP接口下载M3U8;2) 通过AVIO动态拼接FMP4片段;3) 在编码参数变化时动态更新解码器。该方法有效解决了HLS流中的不连续片段处理问题,并提供了完整的代码
2026-01-04 10:27:05
483
原创 C++ 基于kmp解析nalu
本文介绍了NALU解析工具的优化实现,重点解决了H.264/H.265视频流中NALU边界处理的复杂性问题。通过将KMP算法直接融入解析循环,持久记录查找状态,有效处理了跨缓存情况下的startcode匹配问题。优化后的NaluParse类简化了接口设计,仅保留核心Decode方法,支持流式数据处理并能自动处理边界情况。示例代码展示了如何将H.264文件封装为MP4格式,包括读取NALU、处理SPS/PPS/IDR帧等关键步骤。该工具适用于视频封装、转码等场景,能正确处理跨缓存的数据边界问题。
2025-12-31 14:18:28
744
原创 c语言 封装跨平台线程类文件
本文介绍了一个跨平台的C语言线程类封装方案,通过宏定义实现Windows(win32 API)和其他平台(pthread)的统一接口。该方案仅需一个头文件即可完成线程、互斥锁、信号量、条件变量等功能的跨平台封装。主要特点包括:使用条件编译区分不同平台;提供线程创建、等待、分离等基本操作;实现互斥锁、信号量、条件变量等线程同步机制;所有功能整合在threads.h头文件中,便于项目集成。这种封装方式简化了多平台开发中的线程操作,提高了代码的可移植性。
2025-12-30 14:00:52
742
原创 c语言 封装跨平台读写锁头文件
本文介绍了一个跨平台C语言线程类封装方案,通过宏定义统一了Windows和Linux平台的读写锁接口。该方案仅需一个头文件即可实现跨平台线程安全操作,支持读写锁的创建、销毁、加锁和解锁等操作。示例代码展示了多线程读写数据的应用场景,使用简单方便,无需额外编译配置,直接包含头文件即可使用。这种设计简化了跨平台多线程编程的复杂度,提高了代码的可移植性和开发效率。
2025-12-30 13:48:48
653
原创 c语言 封装跨平台条件变量头文件
本文介绍了一个跨平台的C语言条件变量封装实现,通过宏定义统一了Windows和Linux/POSIX平台的API接口。该方案仅需一个头文件即可实现条件变量的创建、等待、通知和销毁等功能,支持基本等待和带超时的等待操作。代码示例展示了多线程同步和超时等待的使用场景。这种封装方式简化了跨平台开发,无需额外构建配置,只需包含头文件即可直接使用,提高了代码的可移植性和开发效率。
2025-12-30 11:30:57
874
原创 c语言 封装跨平台信号量头文件
本文介绍了一个跨平台C语言线程类的封装方案,通过宏定义统一Windows和Linux/POSIX平台的信号量操作接口。该方案仅需一个头文件即可实现跨平台信号量功能,支持创建/销毁信号量、等待/超时等待、释放信号量等操作。示例代码展示了多线程同步和超时等待两种典型用法,为C语言项目提供了轻量级、易用的线程同步工具。这种封装方式避免了平台差异带来的开发复杂度,简化了跨平台多线程程序的实现。
2025-12-30 10:47:46
346
原创 c语言 封装跨平台互斥锁头文件
本文介绍了一种跨平台的C语言线程互斥锁封装方案,通过宏定义统一了Windows和Linux平台的互斥锁API接口。该方案仅需一个头文件(mutex.h),无需额外编译配置,即可实现跨平台线程同步功能。文章详细展示了如何通过条件编译区分不同系统平台,并提供了初始化、加锁、尝试加锁、解锁等操作的统一接口。示例代码演示了基本用法,包括加锁/解锁流程和尝试加锁场景。这种轻量级封装简化了跨平台开发中的线程同步处理,具有即插即用的便利性。
2025-06-16 14:18:15
743
原创 c语言 封装跨平台线程头文件
本文介绍了一个跨平台C语言线程封装方案,通过单一头文件实现Windows(win32 API)和其他平台(pthread)的线程操作统一接口。核心思路是利用宏定义屏蔽平台差异,提供线程创建(thread_create)、等待(thread_join)、分离(thread_detach)等通用函数。示例代码展示了线程创建与等待返回值、线程分离两种典型用法。该方案无需额外编译配置,仅需包含头文件即可实现跨平台多线程开发,简化了项目移植和维护工作。通过统一的参数和返回值类型设计,有效解决了不同平台线程实现的兼容性
2025-06-06 17:44:53
1114
原创 C++ 计算代码运行时间
我们编写程序时,有时需要统计代码运行时间,比如记录视频解码耗时,以及视频的播放帧率等以确认性能满足,或者记录代码运行时长作为优化的依据。通常的做法是定义一个变量记录起始时间,在结束时获取当前时间减去起始时间,本文为C++版本将上述操作封装为一些对象方便使用。以上就是今天要讲的内容,本文简单对chrono进行了一个封装,主要目的是方便调用,而且也将均值计算出来了,这样有利于对数据的统计,总的来说还是有一定适用场景的。
2024-11-24 22:55:45
2256
原创 golang 计算代码运行时间
我们编写程序时,有时需要统计代码运行时间,比如记录视频解码耗时,以及视频的播放帧率等以确认性能满足,或者记录代码运行时长作为优化的依据。通常的做法是定义一个变量记录起始时间,在结束时获取当前时间减去起始时间,本文将上述操作封装为一些对象方便使用。以上就是今天要讲的内容,本文简单的对time进行了一个封装,主要目的是方便调用,而且也将均值计算出来了,这样有利于对数据的统计,总的来说还是有一定适用场景的。
2024-11-18 20:28:58
587
原创 Flutter 将ffmpeg动态库制做成插件
有了上一章的ffmpeg接口,我们可以很方便的通过dart调用ffmpeg,但是需要自己部署ffmpeg动态库还是比较麻烦的,尤其是多个平台多个项目时,去一个一个编写部署代码显然是不合理的。最好方式应该是将ffmpeg动态库的部署写在一个插件中,需要使用的项目直接引用插件即可。
2024-10-24 23:46:00
1991
2
原创 C# 实现条件变量
C#提供的多进程同步对象有互斥锁和信号量,但是并没有条件变量。虽然信号量条件变量一定程度可以等效,但是具体的使用还是会有区别。比如说消息队列用条件变量就比信号量方便,用信号量要么缺乏灵活性,要么辅助代码已经和实现一个条件变量没区别了。本文提供了一种条件变量的实现方法,可以用于进程间的同步控制。
2024-07-21 23:05:34
971
原创 C# 实现跨进程消息队列
进程通信一般情况下比较少用,但是也有一些使用场景,有些做视频传输的似乎会用多进程来实现,还有在子进程中调用特定的库来避免内存泄漏,笔者最近也遇到了需要使用多进程的场景。多进程的使用最主要的就是进程间的通信,本文参考了go语言的ipc库,实现了一个基于共享内存的跨进程队列。以上就是今天要讲的内容,实现这样的一个对象,虽然代码量不多,但还是有一点难度的,很多细节需要处理,比如泛型转type以统一接口,信号量实现队列和条件变量是有差异的,用CreateFromFile才能实现跨平台。
2024-07-15 23:32:01
1205
原创 Flutter 实现软鼠标
flutter在嵌入式系统中运行时,有可能遇到drm鼠标无法使用的情况,但鼠标事件却可以正常接收,此时如果有软鼠标,就可以一定程度解决问题。本文提供了一个软鼠标的简单实现。以上就是今天要讲的内容,本文实现的软鼠标还是比较简单的,当然软鼠标对性能还是有一定的影响的,比如在linux中,每次移动都会触发交换缓存进行drm显示。
2024-06-17 09:47:51
938
原创 Flutter 实现StackAllocator简化FFI局部变量的内存管理
使用Flutter通过FFI调用c库的时候,经常需要传字符串或者一些指针变量,这里变量通常都是局部变量,在一个代码块运行完成后就不需要了,我们通常用calloc进行内存申请和释放,但这也带来了一个麻烦,每个变量都需要单独释放,且字符串必须用变量进行释放,不能直接使用字面量作为参数,否则就内存泄漏了。本文提供一种针对上述问题的简化操作。我们实现一个Allocator,用于局部的内存管理,就可以省去每个变量内存释放这个步骤。salloc是一个用于管理局部变量的Allocator。
2024-06-16 16:34:51
749
原创 Flutter 简化线程Isolate的使用
flutter的线程是数据独立的,每个线程一般通过sendport来传输数据,这样使得线程调用没那么方便,本文将提供一种支持lambda启动isolate的方法,且支持捕获值类型变量,以及支持返回值。以上就是今天要讲的内容,本文的提供线程启动方法,很大程度方便了使用,尤其是支持lambda,可以在任意上下文捕获变量开启线程,执行任务,并获取返回值,用法和Future就很类似了,可以当成异步的另一种选择。
2024-06-13 12:21:13
1098
原创 Flutter 简化CustomPainter的绘制
使用Flutter做界面时,有时会需要需要自绘的控件,比如异形按钮或者显示视频,我们通常可以用CustomPainter实现。但是CustomPainter是一个抽象类,需要继承并实现绘制方法,才能进行绘制。本文对CustomPainter进行了一个简单的封装,简化绘制操作。
2024-06-11 17:47:50
1255
原创 Flutter 实现dispose探测控件
开发flutter一般会用状态管理工具,用了状态管理后大部分控件都会是StatelessWidget,StatefulWidget有dispose重载获取控件销毁时机,但StatelessWidget则没有,此时我们要获取控件销毁的时机就需要另寻他法了。这是一个控件用于帮助探测无状态控件的销毁时机,有点类似用于探测控件的显示和隐藏。/// 创建人: xin/// 创建时间: 2023/6/15 13:44/// 注释: 销毁探测控件final S?tag;//自定义数据this.tag,
2024-06-10 13:44:28
1376
原创 Flutter 使用ffigen生成ffmpeg的dart接口
前面几章介绍了flutter各种视频渲染的方法,视频渲染前显然是需要先获取视频流并解码,这些操作就需要用到ffmpeg,前面的几章的解码都是通过c语言调用ffmpeg,再将数据传输到dart渲染的。本章将提供一种生成ffmpeg dart接口的方法,直接用dart就可以调用ffmpeg进行拉流并解码然后显示。
2024-06-08 12:09:39
3133
3
原创 安卓部署ffmpeg全平台so并实现命令行调用
前面的章节实现了ffmpeg全平台so的生成,接下来的步骤就是部署以及使用了,部署so还是比较简单的,用gradle和cmake都可以部署,部署好了就可以直接使用了,如果需要c++进行封装一层,则需要链接,对cmake熟悉的话链接也是比较简单的。以上就是今天讲述的内容,ffmpeg的so部署还是比较容易的,但是命令行的调用会麻烦一些,尤其是要解决ffmpeg退出问题,在c++中比较好解决,java理论上也比较好实现,如果在dart中则会比较麻烦,因为dart的方法通常不能跨线程调用,多线程的情况会出问题。
2024-05-17 10:56:58
1801
原创 C++ 将字符串解析为argc、argv
一般开启子进程的时候,需要传参数,通常直接传输命令行字符串,进入main会自动转换为argc、argv的形式。有些时候会需要需要自己解析命令行的情况,通常采用split空格就可以了,但如果需要支持双引号则会麻烦一些。以上就是今天要讲的内容,本文的实现是比较简单的,用的方法算是比较巧妙,只要支持split就可以用本文的方法实现命令行的解析。
2024-05-16 11:16:26
810
原创 Shell生成支持x264的ffmpeg安卓全平台so
前两张实现了ffmpeg全平台so的生成,但是ffmpeg依赖的第三方库是需要另外编译的,所以本章将提供编译x264库并加入ffmpeg的方法。本章提供的脚本在ubuntu以及windows的wsl、msys2都适用。以上就是今天讲述的内容,生成ffmpeg安卓so其实并不难,如果熟悉交叉编译以及shell,编译起来还是比较简单的,尤其是想生成最小或者完整依赖的包,最好还是自己生成。
2024-05-09 09:25:57
1309
原创 C# wpf 运行时替换方法实现mvvm自动触发刷新
我们知道,使用wpf的绑定功能,代码触发界面改变时,需要在属性的setter触发PropertyChanged事件,以达到界面刷新的效果。上一章我们简化了触发流程,但是依然需要在每个属性的setter中调用方法。本章将再进一步简化,实现setter不需要调方法就可以自动触发界面刷新。定义的用于替换属性setter的方法,确保参数类型兼容。设置NoInlining确保不会被内联优化失去函数地址。再方法中触发RaisePropertyChangedEvent。
2024-04-29 11:54:44
1569
2
原创 C# wpf 嵌入外部程序
实现嵌入各种窗口控件后,其实还会有一种需求:嵌入外部程序,我们有时可能需要嵌入一个浏览器或者或者播放器等一些已有的程序,其嵌入原理也和前面差不多,只要能获取进程的主窗口句柄,然后将窗口嵌入。定义一个依赖属性,提供给xaml设置进程运行的命令行/// 进程运行的命令行以上就是今天要讲的内容,嵌入外部程序还是相对比较容易实现的,而且也有一定的使用场景。创建进程,并能获取到进程的主窗口句柄即可。另外要注意的是管理子进程的退出,其他都问题不大。
2024-04-07 09:56:55
2154
原创 C# 实现子进程跟随主进程关闭
多进程开发经常会遇到主进程关闭,子进程需要跟随主进程一同关闭。比如调ffmpeg命令行实现的录屏程序,录屏程序关闭,ffmpeg进程也需要退出。我们通常在程序关闭时调用Process.Kill()杀掉fmpeg进程即可。但是如果是强制或异常关闭录屏程序,ffmpeg将会变成僵尸进程残留在系统中。本文将提供一种解决此类问题的方法。
2024-04-04 01:04:10
1913
1
原创 C# wpf 实现底部嵌入HwndHost
前面三章内容是笔者基于本章研发过程中的附带产物,但是意外的发现第三章可嵌入wpf控件后,本章的意义就变得不那么大了。本章讲述如何从底部嵌入hwnd窗口,以此来做到嵌入窗口不覆盖wpf控件的效果,这种实现思路参考了flutter的一个插件flutter_native_view,其内部实现就用了这种方式。对于wpf实现会复杂一些,因为提供自绘没有BlendMode之类的东西,无法直接消除底部画面,能够使用的方式是Clip,这种方式限制比较多。不过最终还是实现了功能。
2024-03-30 00:09:06
2012
1
原创 C# wpf 嵌入wpf控件
通过前面的章节我们了解到了如何嵌入Hwnd窗口以及WinForm控件,但是嵌入的控件存在覆盖wpf控件的情况,嵌入控件上面无法显示王鹏飞控件,对UI的布局有一定的影响。本文提供一种解决方法,将wpf控件通过HwndHost的方式嵌入到wpf界面中,以实现HwndHost控件上显示wpf控件的功能。因为默认嵌入控件的承载Window使用了AllowsTransparency,如果需要自己定制窗口属性则可以直接使用Window。
2024-03-27 13:36:51
2154
原创 C# wpf 嵌入winform控件
wpf的强大界面能力,再加上winform的性能以及灵活性,那基本上什么界面都能够做的很好。比如视频渲染用winform,功能按键用wpf,就能达到性能和界面效果和完美结合。wpf有直接的控件支持嵌入winform控件,使用方法也很简单,网上很容易搜到。之所以编写这篇文章,主要用于记录。
2024-03-27 03:00:00
3728
1
原创 C# wpf 嵌入hwnd窗口
wpf是Direct UI,窗口中只有一个hwnd句柄,大部分控件都是直接在上面绘制的。当我们需要使用不同的渲染方式进行绘制时,就会和控件绘制产生冲突。比如使用opengl渲染3d图形或者视频时,直接在窗口绘制就会出现闪烁,与控件相互覆盖。要解决这个问题就需要,添加一个新的hwnd窗口或控件嵌入wpf窗口中,我们可以通过HwndHost就可以实现这样的功能。
2024-03-26 19:56:00
2325
原创 c语言 实现切片数组-拓展栈操作
有了上一章的切片后,已经有了动态数组功能,接下来需要实现栈的功能,在go语言中切片可以直接当栈使用,在c语言中则需要添加一个额外操作,弹出栈顶元素。以上就是今天要讲的内容,拓展栈操作还是比较简单的,而且统一一套接口,即可以当作数组也可以当作栈使用。
2024-03-25 09:40:52
643
原创 c语言 实现切片数组
由于c语言没有集合类的标准库,需要用时只能自己实现,由于c语言没有泛型,使得实现的集合类接口通常比较另类,很多时候都需要二级指针作为参数,且不支持字面量作为参数,使用时心智负担较重。本文参考go语言的slice,找到了一种非常简化的动态数组接口,可以极大的方便使用。
2024-03-25 01:21:13
2228
原创 C# wpf 使用GDI实现截屏
wpf截屏时通常可以采用gdi+,调用起来比较方便。使用gdi也能实现截屏,截屏数据也能转成BitmapSource对象,当然调用流程会复杂一些,而且需要引入win32方法,唯一比较容易的就是可以直接绘制异或鼠标。以上就是今天要讲的内容,本文实现了的GDI截屏与GDI+对比性能略差一些,但也是可以一定程度满足使用,比如用来截屏或者制作放大镜。而且有一个好处是可以做到无额外依赖。总的来说,可以作为一种备选方案或者测试方案。
2024-03-14 00:58:37
1701
原创 C# Stopwatch计算代码运行时间
我们编写程序时,有时需要统计代码运行时间,比如记录视频解码耗时,以及视频的播放帧率等以确认性能满足,或者记录代码运行时长作为优化的依据。通常的做法是定义一个变量记录起始时间,在结束时获取当前时间减去起始时间,本文将上述操作封装为一些对象方便使用。以上就是今天要讲的内容,本文简单的Stopwatch进行了一个封装,主要目的是方便调用,而且也将均值计算出来了,这样有利于对数据的统计,总的来说还是有一定适用场景的。
2024-03-13 01:07:54
1346
原创 Windows C/C++ 任意线程通过hwnd将操作发送到UI线程执行
以上就是今天要讲的内容,本文仅仅简单的实现了通用的线程invoke,且只支持同步,通用的异步invoke实现稍微复杂些(基本实现的方式则比较简单),以后有空再做。总的来说,有了本文的代码很大程度的方便了使用,尤其是一个新的项目突然需要invoke功能,按照基本实现的方式在窗口中写一遍是很麻烦的,而优化的实现则可以直接复用,调用invoke即可。
2024-03-09 22:58:54
875
原创 C# wpf利用Clip属性实现截屏框
第二章已经实现过截屏框,实现方法相对简单,也仅支持矩形框。最近使用wpf的clip时发现了一种用法,可以实现穿透效果。那显然我们基于clip也能实现截屏窗口,而且支持任意形状。以上就是今天要讲的内容,有了之前的基础本文实现起来相对容易,当前目前的也是比较初步的功能,但灵活性是比DockPanel要好的,尤其是支持任意形状,这样就有利于后期划线截屏的实现了。
2024-01-22 18:01:41
1298
6
原创 C# 实现单线程异步互斥锁
C#对异步的支持越来越成熟,async、await简化了代码也提高了可读性,但由于在一段上下文中有了异步操作,意味着这段操作可能会被同时重复调用,如果本身没有被设计可以重复调用的情况下,就很可能会出问题。以上就是今天要讲的内容,本文简单的实现了单线程的异步互斥锁,实现起来相对简单,但作用还是比较大的。虽然说有些情况的异步是可以在前期设计上避免同时调用,比如登录按钮点击后出现蒙板不允许再次点击,但是对于已存在的代码出现了同时调用问题,此时有互斥锁则可以避免大范围改动代码,有效解决问题。
2024-01-17 10:27:40
1870
ffplay自定义播放器封装C#接口
2022-05-14
C# wpf使用ffmpeg命令行实现录屏
2022-10-29
ffmpeg7.0安卓全平台so动态库
2022-06-15
使用mp4v2将h264和aac封装成mp4
2022-05-07
C# wpf 使用ffplay实现视频播放器
2022-05-22
Flutter 使用Texture实现Windows渲染视频
2022-11-18
C++ 使用fdk-aac对音频编码
2022-02-02
C++ 读取h264中的nalu
2022-05-08
使用ffmpeg解码音频sdl(push)播放
2022-10-29
C# wpf style中实现可定制的自定义标题栏
2022-07-13
Flutter 使用FFI+CustomPainter实现全平台渲染视频
2022-11-23
Flutter 使用Texture实现Linux渲染视频
2022-11-20
Flutter 使用Texture实现Android渲染视频
2022-11-20
C# wpf 实现截屏框截屏功能
2022-07-02
使用ffmpeg解码视频渲染到sdl窗口
2022-07-22
C# wpf 使用DockPanel实现截屏框
2022-07-01
使用gdi实现多路视频流合并
2022-06-10
C# wpf 实现自定义界面操作分离的MessageBox
2022-05-27
C++ 解析aac-adts的头部信息
2022-05-08
C# wpf 使用d3d渲染dxva2解码数据
2022-04-17
C++ 实现ffmpeg解析hls fmp4 EXT-X-DISCONTINUITY并支持定位
2026-01-04
C++ 基于kmp解析nalu
2025-12-31
ffmpeg6.1.1安卓全平台so动态库
2023-11-16
C# 基于共享内存实现跨进程队列
2024-07-15
Flutter 使用ffigen生成ffmpeg的dart接口
2024-06-08
ffmpeg5.1.4.安卓全平台so动态库
2023-11-17
ffmpeg4.3.6安卓全平台so动态库
2023-11-17
C# wpf 运行时替换方法实现mvvm自动触发刷新
2024-04-29
C# wpf 实现底部嵌入HwndHost
2024-04-05
C/C++ 高精度(加减乘除)算法二进制优化
2023-04-23
C# wpf 使用GDI实现截屏
2024-03-18
C# wpf 实现任意控件(包括窗口)更多调整大小功能
2024-01-16
C# wpf 实现任意控件(包括窗口)更多拖动功能
2023-11-08
C# 使用waveIn实现声音采集
2023-10-30
C# wpf 实现截屏框热键截屏功能
2023-09-07
使用eXosip+ffmpeg、ffplay命令行实现sip客户端
2023-08-07
Flutter 使用texture-rgba-renderer实现桌面端渲染视频
2023-07-29
Flutter Windows通过嵌入Native窗口实现渲染视频
2023-07-22
使用ffmpeg和sdl实现多路音频播放
2023-06-06
使用ffmpeg实现单线程异步的视频播放器
2022-12-13
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅