我正在使用连接到我的安卓设备的 USB 设备
该设备向我发送一个包含视频帧的缓冲区,它会持续发送。
当我收到缓冲区时,我应该将特定的标头放入其中并将其作为 m4v 视频文件写入 sd 卡。
那么我应该在媒体播放器中播放它,到目前为止它工作正常,但我应该直播视频。一旦 USB 设备向我发送缓冲区,我就应该处理它并播放它,以便我可以显示视频。
我的问题是如何从字节缓冲区播放视频文件而不将其存储在 SD 卡中?
我知道自从提出问题以来已经有一段时间了,但我处于同样的情况,我有一个视频传输流通过 USB 连接。
看起来您需要创建一个扩展 MediaDataSource 并提供readAt()
和getSize()
方法的数据源。
我的理解是 Android 的 MediaPlayer,当你提供一个 URL/URI 作为数据源时(通过setDataSource()
,处理所有网络以下载数据或从存储中检索数据,并拥有自己的 MediaDataSource 播放器用户。
我的计划是创建一个从 USB 设备获取传输流的服务,并不断更新我提供给 MediaPlayer 的自定义 MediaDataSource。
这是我能找到的关于这个主题的唯一内容,这是一个为使用 MediaDataSource 和 MediaPlayer 进行测试而编写的测试。他们将文件中的视频读入字节数组,然后将该数组用于readAt()
andgetSize()
方法。
我能找到的唯一其他资源是人们向 MediaPlayer 提供字符串,但没有涉及到自己的网络。另外,我很好奇恒定的视频流与固定大小的视频有何不同。
编辑:我写了一篇关于 MediaDataSource 以及如何开始使用它的博客文章。这是链接。
我发现 jacks205 在 Closeable 中没有提到抽象方法 close()。我们还需要写close(),否则编译会报如下错误: YourMediaDataSource is not abstract and does not override abstract method close() in Closeable