目录
[📖 引言:为什么选择 Claude Code?](#📖 引言:为什么选择 Claude Code?)
[🎯 项目概述:JUST 播放器 V3.0](#🎯 项目概述:JUST 播放器 V3.0)
[🚀 开发过程:从 Hello World 到完整播放器](#🚀 开发过程:从 Hello World 到完整播放器)
[第四阶段:UI 交互(5小时)](#第四阶段:UI 交互(5小时))
[📊 效率对比:传统开发 vs Claude Code](#📊 效率对比:传统开发 vs Claude Code)
[Claude Code 生成的代码](#Claude Code 生成的代码)
[💡 Claude Code 高级技巧](#💡 Claude Code 高级技巧)
[1. 分阶段提问](#1. 分阶段提问)
[2. 描述问题而非猜测解决方案](#2. 描述问题而非猜测解决方案)
[3. 请求代码审查](#3. 请求代码审查)
[🎓 技术亮点](#🎓 技术亮点)
[1. 动态顶点缓冲区更新](#1. 动态顶点缓冲区更新)
[2. 线程安全的资源管理](#2. 线程安全的资源管理)
[3. 归一化坐标系统](#3. 归一化坐标系统)
[📈 项目成果](#📈 项目成果)
[🔮 未来展望](#🔮 未来展望)
[V3.1 计划(使用 Claude Code)](#V3.1 计划(使用 Claude Code))
[V4.0 展望](#V4.0 展望)
[💬 总结:Claude Code 改变了什么?](#💬 总结:Claude Code 改变了什么?)
[🚀 立即开始](#🚀 立即开始)
[安装 Claude Code](#安装 Claude Code)
[📌 附录:项目截图](#📌 附录:项目截图)
开发时间:2026年1月
项目地址:本地项目
技术栈:.NET 7.0 + WPF + FFmpeg + DirectX 11
📖 引言:为什么选择 Claude Code?
作为一名开发者,你是否曾想过:能不能用 AI 从零开始开发一个自己想要的视频播放器?
传统的视频播放器开发需要深入掌握:
-
✗ FFmpeg 视频解码原理
-
✗ DirectX 11 渲染管线
-
✗ 音视频同步算法
-
✗ Windows 消息循环机制
这些知识每一项都需要数月甚至数年的积累。但使用 Claude Code ,我仅用业余时间就完成了一个功能完善的视频播放器!功能全部是我想要的,没有广告!!!
本文将记录我从零开始开发 JUST 播放器 V3.0(自己命名的) 的完整过程,从基础功能到我想要的全部功能,迭代了3个版本,展示 Claude Code 如何革命性地提升开发效率。
claude code 安装部署请参考:AI编程之智谱+claude code详细安装使用教程
🎯 项目概述:JUST 播放器 V3.0
功能清单
-
✅ 多格式视频播放(基于 FFmpeg)
-
✅ Direct3D 11 硬件加速渲染
-
✅ 音视频同步播放
-
✅ 视频比例控制(原始/拉伸/16:9/4:3)
-
✅ 控制条手动隐藏/显示
-
✅ 全屏模式
-
✅ 键盘快捷键控制
-
✅ 拖拽文件打开
技术架构
┌─────────────────────────────────┐
│ UI Layer (WPF) │
│ MainWindow.xaml / MainWindow.cs │
└─────────────┬───────────────────┘
│
┌─────────────▼───────────────────┐
│ API Layer (PlayerEngine) │
│ 播放控制 | 音视频同步 | 状态管理 │
└─────────────┬───────────────────┘
│
┌─────────────▼───────────────────┐
│ Decoder Layer (FFmpeg) │
│ VideoDecoder | AudioDecoder │
└─────────────┬───────────────────┘
│
┌─────────────▼───────────────────┐
│ Renderer Layer (DirectX 11) │
│ VideoRenderer | AudioRenderer │
└─────────────────────────────────┘
🚀 开发过程:从 Hello World 到完整播放器
第一阶段:环境搭建(2小时)
挑战:如何选择技术栈?
我问 Claude Code:
"我想开发一个 Windows 视频播放器,应该使用什么技术栈?"
Claude Code 给出了详细的方案对比:
| 方案 | 优点 | 缺点 | 推荐度 |
|---|---|---|---|
| WPF + FFmpeg | 成熟稳定、UI丰富 | 需要封装 FFmpeg | ⭐⭐⭐⭐⭐ |
| WinForms + FFmpeg | 简单易用 | UI 陈旧、渲染能力弱 | ⭐⭐⭐ |
| Electron + FFmpeg | 跨平台 | 性能差、体积大 | ⭐⭐ |
| Qt + FFmpeg | 跨平台、强大 | 学习曲线陡峭 | ⭐⭐⭐⭐ |
最终选择:WPF + FFmpeg + DirectX 11
Claude Code 生成的项目初始化脚本:
dotnet new wpf -n VideoPlayer
cd VideoPlayer
dotnet add package FFmpeg.AutoGen
dotnet add package SharpDX.Direct3D11
dotnet add package SharpDX.DXGI
dotnet add package NAudio
第二阶段:核心渲染引擎(8小时)
这是最复杂的部分。传统开发需要:
-
学习 DirectX 11 API(数百个函数)
-
理解渲染管线(VS → PS → OutputMerger)
-
处理设备上下文和资源管理
我的做法:向 Claude Code 描述需求,让它生成核心代码。
示例对话:
我:
"创建一个 DirectX 11 视频渲染器,需要支持:
初始化 Direct3D 设备和交换链
编译顶点和像素着色器
创建顶点缓冲区
渲染视频纹理到窗口"
Claude Code 生成了完整的 VideoRenderer.cs(500+ 行代码):
public unsafe class VideoRenderer : IDisposable
{
private D3DDevice? _device;
private SwapChain? _swapChain;
private Texture2D? _renderTarget;
private RenderTargetView? _renderTargetView;
private Texture2D? _videoTexture;
private ShaderResourceView? _videoTextureView;
// ... 渲染管线组件
// 简单的顶点着色器 (HLSL)
private const string VertexShaderCode = @"
Texture2D tex : register(t0);
SamplerState samp : register(s0);
struct VS_INPUT
{
float2 pos : POSITION;
float2 tex : TEXCOORD;
};
struct PS_INPUT
{
float4 pos : SV_POSITION;
float2 tex : TEXCOORD;
};
PS_INPUT main(VS_INPUT input)
{
PS_INPUT output;
output.pos = float4(input.pos, 0.0, 1.0);
output.tex = input.tex;
return output;
}";
// ... 初始化、渲染、资源管理代码
}
关键点:
-
✅ 自动处理 DirectX 资源生命周期
-
✅ 使用
unsafe代码优化性能 -
✅ 线程安全设计(
lock保护) -
✅ 完善的异常处理
第三阶段:视频比例控制(3小时)
需求:支持多种视频显示比例
传统做法:
// 需要手动计算缩放比例、letterbox 坐标...
// 容易出错,需要大量调试
Claude Code 做法: 我描述需求:
"实现视频比例切换功能,支持:
窗口比例(拉伸填充)
原始比例(保持宽高比,添加黑边)
16:9 强制比例
4:3 强制比例
使用动态顶点缓冲区更新实现"
Claude Code 生成了核心算法:
// 计算渲染区域(归一化坐标:-1到1)
private (float x, float y, float width, float height) CalculateRenderRect()
{
if (_videoWidth <= 0 || _videoHeight <= 0)
return (-1f, -1f, 2f, 2f); // 全屏
float windowAspect = (float)_width / _height;
float videoAspect = (float)_videoWidth / _videoHeight;
float renderWidth, renderHeight;
switch (_aspectRatio)
{
case AspectRatioMode.Original:
// 保持原始比例,添加letterbox
if (windowAspect > videoAspect)
{
// 窗口更宽,上下有黑边
renderHeight = 2f; // 全高
renderWidth = renderHeight * videoAspect / windowAspect * 2f;
}
else
{
// 窗口更高,左右有黑边
renderWidth = 2f; // 全宽
renderHeight = renderWidth * windowAspect / videoAspect * 2f;
}
break;
case AspectRatioMode.Stretch:
// 拉伸填充整个窗口
return (-1f, -1f, 2f, 2f);
// ... 其他比例模式
}
// 居中渲染矩形
float x = -renderWidth / 2;
float y = -renderHeight / 2;
return (x, y, renderWidth, renderHeight);
}
亮点:
-
🎯 数学逻辑清晰,一次编译通过
-
🚀 性能优化:按需更新顶点(
_needUpdateVertices标志) -
🔒 线程安全:使用
lock保护共享状态 -
📝 注释详细:每个算法步骤都有说明
第四阶段:UI 交互(5小时)
挑战:WindowsFormsHost z-index 问题
问题描述 : WPF 的 WindowsFormsHost 控件(用于托管 Direct3D 表面)会渲染在所有 WPF 控件之上,导致其他控件被遮挡。
我的描述:
"隐藏控制条后,需要显示一个半透明的按钮来恢复控制条,但 WindowsFormsHost 挡住了所有 WPF 控件,如何解决?"
Claude Code 的解决方案 : 使用 Popup 控件,它创建独立的窗口层,可以绕过 WindowsFormsHost 的 z-index 限制!
<!-- 独立的显示控制条按钮(使用Popup) -->
<Popup x:Name="ShowButtonPopup"
Placement="Relative"
HorizontalOffset="0"
VerticalOffset="0"
AllowsTransparency="True"
StaysOpen="True"
IsOpen="False"
Focusable="False"
PopupAnimation="None">
<Grid Background="Transparent">
<Button x:Name="BtnShowControlBar"
Width="36"
Height="36"
Content="▲"
Click="BtnShowControlBar_Click"
Background="#40000000"
Foreground="#FFFFFF"
BorderThickness="1"
BorderBrush="#60000000"
Opacity="0.7">
<!-- 按钮样式 -->
</Button>
</Grid>
</Popup>
关键属性:
-
StaysOpen="True":防止点击视频时自动关闭 -
AllowsTransparency="True":支持透明背景 -
Focusable="False":不影响键盘焦点
这个技巧是 Claude Code 凭借丰富的 Windows 开发经验给出的!
第五阶段:测试与优化(12小时)
Claude Code 协助调试:
-
内存泄漏问题
-
我:视频播放一段时间后崩溃
-
Claude Code:分析日志 → 发现 DirectX 资源未释放 → 生成
Dispose()模式代码
-
-
音视频不同步
-
我:声音和画面对不上
-
Claude Code:添加时间戳同步逻辑 → 使用
Stopwatch精确计时
-
-
全屏切换闪烁
-
我:全屏时有白屏闪烁
-
Claude Code:先调整窗口大小再进入全屏 → 消除闪烁
-
📊 效率对比:传统开发 vs Claude Code
| 指标 | 传统开发 | Claude Code | 提升 |
|---|---|---|---|
| 学习时间 | 6个月 | 0小时 | ⬇️ 100% |
| 开发时间 | 3-6个月 | 30小时 | ⬇️ 95% |
| 代码行数 | 8000+ | 3000 | ⬇️ 62% |
| Bug数量 | 50+ | 10 | ⬇️ 80% |
| 维护成本 | 高 | 低 | ⬇️ 70% |
代码质量对比:
传统手写代码示例
// 容易出错:忘记释放资源
public void Render()
{
var device = new Device();
var texture = device.CreateTexture();
// ... 渲染逻辑
// ❌ 忘记 Dispose()
}
Claude Code 生成的代码
// 完善的资源管理
public class VideoRenderer : IDisposable
{
private bool _disposed;
public void Dispose()
{
if (!_disposed)
{
// 按正确顺序释放资源
_samplerState?.Dispose();
_inputLayout?.Dispose();
_vertexBuffer?.Dispose();
// ... 释放所有资源
_disposed = true;
}
GC.SuppressFinalize(this);
}
}
💡 Claude Code 高级技巧
1. 分阶段提问
❌ 错误做法:
"帮我写一个视频播放器"
✅ 正确做法:
"第一步:创建项目结构 第二步:实现 Direct3D 渲染器 第三步:添加 UI 控件 ..."
2. 描述问题而非猜测解决方案
❌ 错误做法:
"使用 Z-Index 修复控件遮挡问题"
✅ 正确做法:
"WindowsFormsHost 挡住了其他控件,如何让某个按钮显示在它上面?"
3. 请求代码审查
示例:
"这段代码有性能问题吗?
for (int i = 0; i < 1000000; i++) { texture.Update(data); } ```"
Claude Code 回复:
"❌ 性能问题:
每次循环都调用 Update,GPU 通信开销大
应该批量更新
✅ 优化方案:
// 收集所有更新 var updates = new List<Data>(); for (int i = 0; i < 1000000; i++) { updates.Add(CalculateUpdate(i)); } // 一次性更新 texture.UpdateBatch(updates); ```"
🎓 技术亮点
1. 动态顶点缓冲区更新
传统做法 :每帧重建缓冲区(性能差) Claude Code 做法:按需更新(性能优化 10 倍)
private bool _needUpdateVertices = true;
private void RenderVideoTexture(DeviceContext context)
{
// ✅ 只在需要时更新
if (_needUpdateVertices)
{
UpdateVertexBuffer();
_needUpdateVertices = false;
}
// ... 渲染逻辑
}
2. 线程安全的资源管理
private readonly object _renderLock = new object();
public void SetAspectRatio(AspectRatioMode mode)
{
lock (_renderLock) // ✅ 线程安全
{
_aspectRatio = mode;
_needUpdateVertices = true;
}
}
3. 归一化坐标系统
Claude Code 选择了 NDC(Normalized Device Coordinates):
-
X: -1(左)到 +1(右)
-
Y: -1(下)到 +1(上)
这使得窗口大小变化时,渲染逻辑无需修改!
📈 项目成果
最终代码统计
Language Files Lines Code Comments Blanks
──────────────────────────────────────────────────────────
C# 6 3200 2600 300 300
XML 1 600 500 50 50
──────────────────────────────────────────────────────────
Total 7 3800 3100 350 350
性能指标
| 指标 | 数值 |
|---|---|
| 冷启动时间 | < 2秒 |
| 1080p 播放 | 流畅 ✅ |
| 4K 播放 | 硬件加速 ✅ |
| 内存占用 | 50-100 MB |
| CPU 占用 | < 10% |
用户反馈
"界面简洁,播放流畅,比 VLC 启动更快!" ------ 测试用户 A
"比例切换功能太实用了,看老电影再也不用拉伸变形了!" ------ 测试用户 B
🔮 未来展望
V3.1 计划(使用 Claude Code)
- 播放列表功能
- 字幕支持(.srt 文件)
- 视频截图
- 播放速度控制
V4.0 展望
- 网络流播放(RTSP, HLS)
- 视频滤镜(亮度、对比度、色饱和度)
- AI 超分辨率(使用 Claude API)
💬 总结:Claude Code 改变了什么?
对开发者
传统开发:
-
❌ 需要深入掌握每个技术细节
-
❌ 学习曲线陡峭
-
❌ 容易陷入技术陷阱
Claude Code 辅助:
-
✅ 专注于业务逻辑,AI 处理技术细节
-
✅ 快速验证想法
-
✅ 代码质量有保障
对行业
-
降低开发门槛
-
初级开发者也能完成复杂项目
-
减少对资深专家的依赖
-
-
提升开发效率
-
30小时 vs 3个月
-
快速迭代,快速试错
-
-
代码质量提升
-
AI 生成的代码更规范
-
自动处理边界情况
-
完善的错误处理
-
🚀 立即开始
安装 Claude Code
# 访问 Claude Code 官网
# 下载并安装 Claude Code CLI
我的第一个项目
# 创建项目
dotnet new wpf -n MyProject
cd MyProject
# 启动 Claude Code
claude-code
# 开始对话
> "帮我创建一个视频播放器的UI界面"
> "实现 FFmpeg 视频解码功能"
> "添加 Direct3D 渲染支持"
📌 附录:项目截图
- 项目目录

- 主界面

- 播放中

- 全屏模型

🌟 如果这篇文章对你有帮助,请点赞、收藏、关注支持一下!感谢支持!
标签 :#Claude-Code #AI编程 #视频播放器 #DirectX #FFmpeg #WPF #从零开始
本文参与 CSDN "Claude Code 征文活动"