4

我正在使用连接到我的安卓设备的 USB 设备

该设备向我发送一个包含视频帧的缓冲区,它会持续发送。

当我收到缓冲区时,我应该将特定的标头放入其中并将其作为 m4v 视频文件写入 sd 卡。

那么我应该在媒体播放器中播放它,到目前为止它工作正常,但我应该直播视频。一旦 USB 设备向我发送缓冲区,我就应该处理它并播放它,以便我可以显示视频。

我的问题是如何从字节缓冲区播放视频文件而不将其存储在 SD 卡中?

4

2 回答 2

3

我知道自从提出问题以来已经有一段时间了,但我处于同样的情况,我有一个视频传输流通过 USB 连接。

看起来您需要创建一个扩展 MediaDataSource 并提供readAt()getSize()方法的数据源。

我的理解是 Android 的 MediaPlayer,当你提供一个 URL/URI 作为数据源时(通过setDataSource(),处理所有网络以下载数据或从存储中检索数据,并拥有自己的 MediaDataSource 播放器用户。

我的计划是创建一个从 USB 设备获取传输流的服务,并不断更新我提供给 MediaPlayer 的自定义 MediaDataSource。

是我能找到的关于这个主题的唯一内容,这是一个为使用 MediaDataSource 和 MediaPlayer 进行测试而编写的测试。他们将文件中的视频读入字节数组,然后将该数组用于readAt()andgetSize()方法。

我能找到的唯一其他资源是人们向 MediaPlayer 提供字符串,但没有涉及到自己的网络。另外,我很好奇恒定的视频流与固定大小的视频有何不同。

编辑:我写了一篇关于 MediaDataSource 以及如何开始使用它的博客文章。这是链接

于 2015-10-28T04:14:19.290 回答
0

我发现 jacks205 在 Closeable 中没有提到抽象方法 close()。我们还需要写close(),否则编译会报如下错误: YourMediaDataSource is not abstract and does not override abstract method close() in Closeable

于 2016-08-22T17:14:09.867 回答