如何直接play/stream视频存储在BLOBs中
How to directly play/stream video stored in BLOBs
在我的应用程序中,视频存储为一系列加密的 SQLite BLOB。
为了直接从那些 SQL 网站播放视频,我需要编写自己的自定义 ContentProvider
。我知道如何在 SQL 查询上实现基本的 ContentProvider
,但在这种情况下我不知道该怎么做。
如何VideoView.setVideoURI()
利用提供的 URI?它读取的是 Cursor
或 ParcelFileDescriptor
还是某种流?
有什么想法、线索、提示吗?
更新
基本上问题不仅与 ContentProvider
有关,而且与直接来自 SQLite blob 的 streaming/playing 视频有关。如何播放此视频并不重要 - 唯一的前提条件:禁止创建 intermediate/temporary 视频文件(出于安全考虑)。
可以使用ServerSocket。
作为 VideoView uri,您可以设置服务器套接字 (127.0.0.1:PORT) 的本地主机 url。
从 SQL 读取 blob 并解密后,将其写入 Socket,VideoView 将读取并播放它。
它不会存储在任何地方(仅在内存中)。
您需要注意线程的缓冲和同步。
我建议为 ServerSocket 使用 2 个线程(一个用于接受连接,第二个用于与客户端通信)。
我遇到过某些特定设备尝试打开流两次。如果您的线程将被与客户端的通信阻塞并且不接受另一个连接,它可能会因管道损坏而失败。
在我的应用程序中,视频存储为一系列加密的 SQLite BLOB。
为了直接从那些 SQL 网站播放视频,我需要编写自己的自定义 ContentProvider
。我知道如何在 SQL 查询上实现基本的 ContentProvider
,但在这种情况下我不知道该怎么做。
如何VideoView.setVideoURI()
利用提供的 URI?它读取的是 Cursor
或 ParcelFileDescriptor
还是某种流?
有什么想法、线索、提示吗?
更新
基本上问题不仅与 ContentProvider
有关,而且与直接来自 SQLite blob 的 streaming/playing 视频有关。如何播放此视频并不重要 - 唯一的前提条件:禁止创建 intermediate/temporary 视频文件(出于安全考虑)。
可以使用ServerSocket。
作为 VideoView uri,您可以设置服务器套接字 (127.0.0.1:PORT) 的本地主机 url。
从 SQL 读取 blob 并解密后,将其写入 Socket,VideoView 将读取并播放它。
它不会存储在任何地方(仅在内存中)。
您需要注意线程的缓冲和同步。
我建议为 ServerSocket 使用 2 个线程(一个用于接受连接,第二个用于与客户端通信)。
我遇到过某些特定设备尝试打开流两次。如果您的线程将被与客户端的通信阻塞并且不接受另一个连接,它可能会因管道损坏而失败。