【问题标题】:Can Shaka packager SDK read input directly from a memory buffer?Shaka packager SDK 可以直接从内存缓冲区读取输入吗?
【发布时间】:2021-11-15 02:32:30
【问题描述】:

我正在使用 Shaka 打包器 SDK(不是默认打包器程序)编写媒体处理应用程序,基本上我将打包器 (Shaka::Packager packager;) 包装在我编写的包装器应用程序中。

我知道 Shaka::Packager 可以从本地文件、UDP 流或管道等读取输入。现在,我需要让 Shaka::packager 从从包装应用程序传入的内存缓冲区读取媒体输入(因此,包装应用程序会将媒体数据从某个文件加载到内存缓冲区)。我想知道这是否可能。谢谢!

【问题讨论】:

标签: video video-streaming shaka


【解决方案1】:

您能否更具体地说明您的输入要求?像 Shaka 这样的媒体管道是面向流的,因此请考虑“查看数据一次,执行一些操作,然后丢弃”。

查看 Shaka MemoryFile,我们可以看到后备存储是一个 std::vector,因此在管道期间所有数据都保存在内存中。媒体文件可能会变得很大,我目前正在使用 Tears of Steel 4K:12 分钟的内容需要 7GB。

我看到Shaka提供了CallbackFile接口。这看起来像是一个很好的钩子子类来注入你的内存缓冲区。

【讨论】:

  • MemoryFile 对我来说很好用。在输入端,我将媒体文件数据写入内存文件,并将内存文件 url(例如 memory://test.mp4)配置为 Shaka 打包器管道的输入。然后我启动管道,它将读取存储在内存文件中的媒体数据并开始媒体处理。在我的用例中,Shaka 不需要处理长达数小时的视频文件,它只需要处理几秒钟的媒体块序列(例如 hls 或短划线段)。到目前为止,我还没有看到使用内存文件有任何问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-16
  • 2020-01-24
  • 2018-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-08
相关资源
最近更新 更多