WPF下如何直接播放YUV视频流

viki117 2013-06-05 04:57:49
现在的做法是把YUV转为RGB后,再把RGB转BitmapSource,然后加载到Image.Source里面,但是效率低;
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来播放视频。
...全文
1856 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
三本渣渣 2014-03-29
  • 打赏
  • 举报
回复
求助,楼主 有什么好方法共享了吗?我也遇到此问题 效率太差了
viki117 2013-06-21
  • 打赏
  • 举报
回复
VideoRendererElement虽然有定义yuv12等YUV的视频枚举,但是实际上只实现了RGB的渲染,RGB就不需要借助DX编程来实现了,WPF本身就可以,D3DImageSample和kinect里面的WpfD3DInterop工程都有如何透过D3D来实现画面渲染,只是不针对YUV,正在到处找D3D直接渲染YUV的方法,完全不懂DX编程,有点吃力啊
yingfengerchi 2013-06-08
  • 打赏
  • 举报
回复
最近正在研究这个。可以参考一下网上VideoRendererElement这个开源的东西,是WPF结合DirectShow做的。
syx151 2013-06-08
  • 打赏
  • 举报
回复
DirectShow播放的话依然是要基于窗体句柄的,所以依然无法在视频窗口上叠加其他WPF的东西,不过也许可以变通一下,另外做一个窗体,在上面放WPF控件,这样就可以把它盖到视频窗口上面去了,但是背景要透明估计也比较难
viki117 2013-06-08
  • 打赏
  • 举报
回复
SharedEffect不知道是否可以实现~~~这个话题看来比较偏,最后还是决定用显卡来解决这个问题,借用硬件解码,在学习SharedEffect的Shared编程
viki117 2013-06-06
  • 打赏
  • 举报
回复
居然没人顶。。。。。。。。。。。。。。。。。
ariesget 2013-06-06
  • 打赏
  • 举报
回复
我觉得google比这里求助来结果更快。去搜搜英文资料应该有类似的问题。
viki117 2013-06-05
  • 打赏
  • 举报
回复
有人研究过用D3DImage组件,使用DX来播放YUV视频不?
viki117 2013-06-05
  • 打赏
  • 举报
回复

111,098

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧