# NativeVideo

C++ 编写的视频播放器，使用 DirectX 11 渲染，尽可能少依赖

## 依赖

* FFmpeg 4.3 以上 <https://github.com/BtbN/FFmpeg-Builds/releases>
* [Dear ImGui](https://github.com/ocornut/imgui) (已经包含在项目里面了)

## 编译

* 把 include 和 lib 路径配置好
* 用 Visual studio 2019 打开
* 直接编译解决方案

## 操作

* 鼠标移动就会出现UI，可以拖动播放进度条，滚轮调整音量，回车键全屏（不要按ALT + ENTER）。鼠标不动UI自然消失
* WASD 前进后退，按住鼠标右键可以移动视角，总之就像FPS一样（但是空格不能跳跃😂）。Setting 窗口的 `Reset` 按钮可以恢复视角
* 可以插入xbox手柄，用左摇杆和右摇杆控制摄像机，LT键按住可以放大，松开恢复，手柄十字键的上下控制音量，左右控制进度，A键控制暂停播放
* 其实这个3D世界有两块屏幕，另外一块在背面，`back` 按钮可以将视角移动到背面，Filters 的各种画面效果只会作用在背面的这块屏幕。

## 目前的效果

![a](images/Snipaste_2021-02-18_14-33-49.png)
![a](images/Snipaste_2021-02-18_14-34-18.png)
![a](images/Snipaste_2021-02-19_01-58-57.png)
![a](images/Snipaste_2021-02-19_20-20-41.png)

## 参考资料

* [FFmpeg examples](https://github.com/FFmpeg/FFmpeg/tree/master/doc/examples)
* [FFmpeg 使用 Dxva2 硬件加速以及渲染的一种方法](https://www.z4none.me/post/2020/ffmpeg-dxva2/)
* [Streaming Video With FFmpeg and DirectX 11](https://medium.com/swlh/streaming-video-with-ffmpeg-and-directx-11-7395fcb372c4)
* [Windows平台上编译ffmpeg源码，调试ffplay](https://www.bilibili.com/video/BV1VE411K766)
* [【人工听译】Directx3D11入门详细教程](https://www.bilibili.com/video/BV1KC4y1Y7tc)
* [Kernel (image processing)](https://en.wikipedia.org/wiki/Kernel_image_processing)
* [bShaders](https://github.com/butterw/bShaders)
* [Core Audio APIs, WASAPI, Rendering a Stream](https://docs.microsoft.com/en-us/windows/win32/coreaudio/rendering-a-stream)