小编Fla*_*ker的帖子

使用VLC imem从内存播放h264视频文件,但收到错误"主流错误:无法预填充缓冲区"

我有一个加载到内存中的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

在python中使用内存中的libVLC播放视频

我的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)

c++ linux video vlc h.264

3
推荐指数
1
解决办法
3546
查看次数

标签 统计

c++ ×1

h.264 ×1

linux ×1

video ×1

vlc ×1