zoukankan      html  css  js  c++  java
  • 在流之间共享数据

    翻译自MSDN - Sharing Data Between Streams

    处理多媒体数据通常需要大量的系统资源;因此,你应该尽可能的避免数据拷贝操作。流式架构支持共享流采样,这是一种将一个流中的数据移动到其他流中而无需拷贝操作的机制。这可以使两个流之间的数据传输更加高效,即便目的流并不支持当前的数据格式。

    比如,假设你有一个多媒体流,其中包含了三个数据流:视频和音频,以及匹配视频内容并且带有时间戳的URL数据。你想编写一个程序,用来在每一个视频帧上添加一个版权通告,并将数据写到另一个流来存储,但是你的程序除了视频流之外不支持其他任何数据流。对于视频流来说,你创建了一个附加到必要的DirectDraw表面的采样。然后你可以使用相同表面的指针来调用IDirectDrawMediaStream::CreateSample方法或是IMediaStream::CreateSharedSample方法来创建一个输出流。不管怎么创建,输入和输出流会共享DirectDraw表面。因为你可以处理视频格式,所以你可以按照你需要的方式来访问这个表面。

    为了得到其他来源流的指针(音频和URL),通过对源容器流进行枚举来获取那些非视频流的指针。这些来源流每一个在输出流容器中都有一个相应的输出流。可以使用每一个来源流的指针来调用输出容器的IMultiMediaStream::GetMediaStream方法来获取这些输出指针。下面的步骤描述了这个过程:

    调用IMultiMediaStream::EnumMediaStreams方法来获取来源流的指针。注意来源流不能是视频流,因为你的程序可以处理它的格式。
    使用步骤1中得到的指针来调用输出容器的IMultiMediaStream::GetMediaStream方法。这会返回一个指向所需输出流的指针。
    调用来源流的的AllocateSample方法。
    调用输出流的CreateSharedSample方法。
    调用来源流的Update方法来读取数据。
    调用输出流的Update方法来写入数据。
    对那些格式不支持的流重复以上步骤。当所有采样完成更新,输出流就会有所有来源流的数据,你的工作也就完成了。

  • 相关阅读:
    centos6升级python
    MySQL的BLOB类型(解决mysql不支持mb4编码的时候存储emoji表情问题)
    librdkafka安装和php扩展php-rdkafka安装
    Mac High Sierra 降级安装Mac Sierra
    mysql常用命令
    PHP_CodeSniffer 安装和phpstorm配置
    SSH登录异常(someone is doing something nasty)
    java并发 —— Lock
    java 并发——线程
    java 并发——内置锁
  • 原文地址:https://www.cnblogs.com/s5689412/p/221773.html
Copyright © 2011-2022 走看看