如何直接播放/流式传输存储在BLOB中的视频

时间:2016-01-09 21:51:11

标签: android sqlite video android-contentprovider android-videoview

在我的应用中,视频存储为一系列加密的SQLite BLOB。

为了直接从那些SQLite播放视频,我需要编写自己的自定义ContentProvider。我知道如何在SQL查询上实现基本ContentProvider,但在这种情况下我不知道如何执行此操作。

VideoView.setVideoURI()如何利用提供的URI?读取的内容是Cursor还是ParcelFileDescriptor还是某种流式?

任何想法,线索,提示?

更新

基本上问题不仅仅是关于ContentProvider,而是关于直接从SQLite blob播放/播放视频。播放此视频并不重要 - 只有前提条件:禁止创建中间/临时视频文件(出于安全考虑)。

1 个答案:

答案 0 :(得分:2)

您可以使用ServerSocket 作为VideoView uri,您可以设置服务器套接字的localhost url(127.0.0.1:PORT)。

从SQL读取blob并解密后,将其写入Socket,VideoView将读取并播放它。
它不会存储在任何地方(只在内存中)。

您需要处理线程的缓冲和同步。

我建议在ServerSocket上使用2个线程(一个用于接受连接,第二个用于与客户端通信)。
我经历过一些特定的设备试图打开两次流。如果您的线程将通过与客户端的通信阻止,并且不接受另一个连接,则它可能会因管道损坏而失败。