在我的应用中,视频存储为一系列加密的SQLite BLOB。
为了直接从那些SQLite播放视频,我需要编写自己的自定义ContentProvider
。我知道如何在SQL查询上实现基本ContentProvider
,但在这种情况下我不知道如何执行此操作。
VideoView.setVideoURI()
如何利用提供的URI?读取的内容是Cursor
还是ParcelFileDescriptor
还是某种流式?
任何想法,线索,提示?
更新
基本上问题不仅仅是关于ContentProvider
,而是关于直接从SQLite blob播放/播放视频。播放此视频并不重要 - 只有前提条件:禁止创建中间/临时视频文件(出于安全考虑)。
答案 0 :(得分:2)
您可以使用ServerSocket 作为VideoView uri,您可以设置服务器套接字的localhost url(127.0.0.1:PORT)。
从SQL读取blob并解密后,将其写入Socket,VideoView将读取并播放它。
它不会存储在任何地方(只在内存中)。
您需要处理线程的缓冲和同步。
我建议在ServerSocket上使用2个线程(一个用于接受连接,第二个用于与客户端通信)。
我经历过一些特定的设备试图打开两次流。如果您的线程将通过与客户端的通信阻止,并且不接受另一个连接,则它可能会因管道损坏而失败。