gpt4 book ai didi

c# - 视频播放器如何将帧数据写入屏幕?

转载 作者:太空宇宙 更新时间:2023-11-03 11:10:00 24 4
gpt4 key购买 nike

我一直在研究机器之间的编码/解码和流式视频,我觉得我已经相当了解从文件到流的管道。我可以打开容器,解码并抓取单个帧和音频 block ,我想在网络上移动这些帧就像简单地发送字节数据一样简单(尽管原始且低效)。我不明白的是它实际上是如何演奏的。简单地将帧写入某个图像框并将音频数据放在声卡缓冲区中并不能很好地工作。任何人都可以向我解释在 vlc player 或 windows media player 等程序中究竟发生了什么,这些程序允许他们将所有这些帧数据发送到屏幕而不破坏 cpu 和内存?只是一般的想法或一些高级文档会很棒。我什至不知道从哪里开始......

谢谢!

最佳答案

如果您使用 OpenGL,您可以创建一个纹理并不断用新的帧数据替换它。这不是一个非常昂贵的操作。然后,您在窗口上绘制一个带纹理的矩形。 glOrtho 是这里有用的投影。

在 Windows 中,如果您使用 DirectX 或 Direct3D,同样的事情也会适用。您甚至可以获得良好的性能 blitting DIB 部分 (GDI):Fastest method for blitting from a pixel buffer into a device context

无论您如何绘制像素,您都可以设置一个更新计时器,就这么简单。

为了获得流畅的操作,您需要在绘图之前进行缓冲,以便磁盘(或网络)和解码延迟不会影响实时绘图。人类甚至可以感知视频中最轻微的抖动。当您的计时器触发时,您需要在图像缓冲区中解码像素并准备好绘制。

关于c# - 视频播放器如何将帧数据写入屏幕?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14391527/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com