gpt4 book ai didi

windows - 我应该为 RTSP 客户端创建一个新线程还是只在媒体基础中使用自定义 IMFMediaSource

转载 作者:可可西里 更新时间:2023-11-01 10:14:32 26 4
gpt4 key购买 nike

我正在编写一个 RTSP 客户端并使用 Media Foundation 将多个 IP 摄像机视频源流式传输到 Windows 显示器。我知道内置的 MF RTSP 不能很好地处理 IP 摄像机,所以我必须编写自定义媒体源:

编写自定义媒体源: https://msdn.microsoft.com/en-us/library/windows/desktop/ms700134(v=vs.85).aspx

此外,以下帖子提供了一些有用的提示,但没有提供太多实现细节:

使用 Media Foundation 通过 RTSP 捕获 H264/AAC 流: https://social.msdn.microsoft.com/Forums/windowsdesktop/en-US/8f67d241-7e72-4509-b5f8-e2ba3d1a33ad/capture-h264aac-stream-via-rtsp-using-media-foundation?forum=mediafoundationdevelopment

如果我在我的自定义媒体源对象中编写我的 RTSP 代码,它是否能够在它自己的线程中充分运行并使用阻塞的“recv”网络调用来接收相机流数据?或者 COM 对象不是真正可以处理此类任务的单独线程吗?阻塞“recv”调用和阻塞 COM 的工作队列之间是否存在潜在冲突?

或者我是否应该使用“CreateThread”创建一个新线程来处理所有 RTSP 细节并将摄像机流数据转发到媒体源对象?

任何能为我指明正确方向的建议都会很棒!

最佳答案

实现您的媒体源和内部实现:

  1. 当您的媒体源“启动”时创建线程:https://msdn.microsoft.com/en-us/library/windows/desktop/ms700134(v=vs.85).aspx#starting
  2. 从第 1 点开始,在您的线程中使用阻塞 recv(或者您可以实现更复杂的东西,如 IOCP 线程)。
  3. 对recv得到的每个RTSP帧进行排队
  4. 在请求新样本时提供相应的帧(队列顶部):https://msdn.microsoft.com/en-us/library/windows/desktop/ms700134(v=vs.85).aspx#source_data

如果需要,您还可以引入 GAP,或者如果没有获得足够的数据,则重复最后一个样本。

关于windows - 我应该为 RTSP 客户端创建一个新线程还是只在媒体基础中使用自定义 IMFMediaSource,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45308037/

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