我有一个加载到内存中的h264视频文件,我尝试使用参数"imem-cat = 4"与imem一起播放,这样vlc将使用访问模块来解复用视频,并且vlc启动并接收我的imem参数成功:
[0x7f38a0000e28] access_imem demux debug: Using get(0x404e1d), release(0x404e91), data(0x7fff5b4a9430), cookie("IMEM")
Run Code Online (Sandbox Code Playgroud)
这个类别也意味着我不必提供DTS和PTS.用于VLC的imem模块没有很好的文档,但我在几个地方发现了提示,例如
https://forum.videolan.org/viewtopic.php?t=111917
https://forum.videolan.org/viewtopic.php?f=32&t=93842
我的imem-get函数只是在第一次调用时将缓冲区指针设置为视频数据,返回0,在任何进一步调用时它返回1表示没有更多数据:
int MyImemGetCallback (void *data,
const char *cookie,
int64_t *dts,
int64_t *pts,
unsigned *flags,
size_t * bufferSize,
void ** buffer)
{
ImemData* imem = (ImemData*)data;
cookie = imem->cookieString;
if(imem == NULL || imem->allBuffered==true) //indicate all data has been get()ted
return 1;
*buffer = (void*) imem->video;
bufferSize = (size_t*) &(imem->bytes);
imem->allBuffered=true;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,在第一次通话后,我收到以下错误:
[0x189cb18] main input debug: Creating an input for 'imem://'
[0x189cb18] …Run Code Online (Sandbox Code Playgroud)