WPF下如何直接播放YUV视频流
现在的做法是把YUV转为RGB后,再把RGB转BitmapSource,然后加载到Image.Source里面,但是效率低;
YUV转为RGB、再把RGB流转BitmapSource这个过程消耗了大量CPU。
silverlight就可以直接播放yu12的流,但不知道怎么直接在WPF里播放YUV,不要第三方组件传句柄的方式,wpf的控件无句柄,如果用了WindowsFormsHost加载其他控件,界面就会被WindowsFormsHost置顶,无法在视频上做叠加、菜单等其他操作了。
YUV转RGB用的是C++的类库,就不贴代码了,转换出来的是Rgb24的格式,下面是RBG转BitmapSource的代码,都是一帧数据的转。
网上有些资料说直接用directshow来直接渲染,不知道WPF中怎么用directshown来播放视频。
YUV转为RGB、再把RGB流转BitmapSource这个过程消耗了大量CPU。
silverlight就可以直接播放yu12的流,但不知道怎么直接在WPF里播放YUV,不要第三方组件传句柄的方式,wpf的控件无句柄,如果用了WindowsFormsHost加载其他控件,界面就会被WindowsFormsHost置顶,无法在视频上做叠加、菜单等其他操作了。
YUV转RGB用的是C++的类库,就不贴代码了,转换出来的是Rgb24的格式,下面是RBG转BitmapSource的代码,都是一帧数据的转。
private BitmapSource ByteArrayToBitmapImage(byte[] byteArray)
{
BitmapSource bmp = null;
bmp = BitmapImage.Create(704, 576, 96, 96, PixelFormats.Rgb24, MainWindow.myPalette, byteArray, 704 * PixelFormats.Rgb24.BitsPerPixel / 8);
return bmp;
}
网上有些资料说直接用directshow来直接渲染,不知道WPF中怎么用directshown来播放视频。
...全文
相关推荐
WPF播放实时视频流
下载并运行这个文件,你将能够直接体验到这个实时视频播放系统的功能。
WPF中用D3D11+DXVA2实现硬件加速视频渲染
D3D11是Windows平台支持硬件视频解码与GPU直通渲染的核心图形API,其通过共享纹理机制(D3D11_RESOURCE_MISC_SHARED)与DXVA2解码器深度协同,实现YUV帧零拷贝传输;结合WPF的D3DImage控件,可绕过CPU密集型Bitmap转换,在医疗影像、安防监控等高实时性场景中达成4K/60fps稳定渲染、CPU占用低于20%、GPU利用率超80%的技术目标;该方案本质是构建一条从媒体解码器到UI渲染管线的低延迟通路,适用于已掌握WPF基础与音视频开发经验的工程师。
wpf实时播放H264裸码
通过反射,我们可以避免静态链接导致的资源冲突,从而实现多个FFmpeg实例并行解码不同的视频流。解码后的数据通常是YUV格式的原始像素数据,不能直接在WPF中显示。
ShowWMVImage.rar
要从WMV文件中提取第一帧图像,我们不能直接依赖WPF的MediaElement控件,因为它不提供这样的功能。
共享内存的方式实现进程间视频流的传输
进程B作为显示端,通过相同名称或句柄打开同一共享内存对象,依据结构体定义解析头部信息,校验帧完整性后,将图像数据直接送入渲染管线,支持使用GDI+、Direct2D、OpenGL或WPF的WriteableBitmap


