vk-video
A library for hardware video decoding (and soon encoding) using Vulkan Video, with wgpu integration.
Overview
The goal of this library is to provide easy access to hardware video coding. You can use it to decode a video frame into a Vec<u8> with pixel data, or into a wgpu::Texture. Currently, we only support H.264 (aka AVC or MPEG 4 Part 10) decoding, but we plan to support at least H.264 encoding and hopefully other codecs supported by Vulkan Video.
An advantage of using this library with wgpu is that decoded video frames never leave the GPU memory. There's no copying the frames to RAM and back to the GPU, so it should be quite fast if you want to use them for rendering.
This library was developed as a part of smelter, a tool for video composition.
Usage
Be sure to check out our examples, especially the player example, which is a simple video player built using this library and wgpu. Because the player is very simple, you need to extract the raw h264 data from a container before usage. Here's an example on how to extract the h264 bytestream out of an mp4 file using ffmpeg:
Then you can run the example with:
Compatibility
On Linux, the library should work on NVIDIA and AMD GPUs out of the box with recent Mesa drivers. For AMD GPUs with a bit older Mesa drivers, you may need to set the RADV_PERFTEST=video_decode environment variable:
RADV_PERFTEST=video_decode
It should work on Windows with recent drivers out of the box. Be sure to submit an issue if it doesn't.
vk-video is created by Software Mansion
Since 2012 Software Mansion is a software agency with experience in building web and mobile apps as well as complex multimedia solutions. We are Core React Native Contributors and experts in live streaming and broadcasting technologies. We can help you build your next dream product – Hire us.