【发布时间】:2015-01-20 05:14:39
【问题描述】:
我正在努力从文件中获取流到我的缓冲区,以便我可以通过我的自定义端口/协议发送它,我遇到了几个问题,所以请帮助我
我在哪里:
-
阅读https://wiki.videolan.org/Stream_to_memory_(smem)_tutorial/的教程后,我可以编译和运行
-
我已经对
smem选项进行了以下更改以处理视频(请参阅最后提到的完整代码)sprintf(smem_options, "#transcode{vcodec=RV32}:smem{video-postrender-callback=%lld,video-prerender-callback=%lld}", // We are using transcode because smem only support raw audio and video formats (long long int)(intptr_t)(void*)&handleStream, (long long int)(intptr_t)(void*)&prepareRender); -
我可以看到 prerender 和 postrenders 都被调用并且正在提供数据
我的问题:
-
目前为了测试输出,我将缓冲区直接转储到文件中,例如
fwrite (p_pixel_buffer, sizeof(char), i_size, myfile);但是 VLC 播放器或任何其他流播放器都没有读取转储的文件,所以我确定我在这里遗漏了一些东西,因为如果我要求 VLC 播放器通过提供完整的转码值直接写入文件,那么一切都很好sprintf(smem_options, "#transcode{vcodec=theo,vb=800,acodec=vorb,ab=128,channels=2,samplerate=44100}:file{dst=stream-output.ogg}" );
我的问题
- 从缓冲区读取是否正确?因为我读过
首先,一个快速警告:从 VLC2.2(当前 git 版本,到 即将发布),size参数是size_t。没有API smem (但是?希望这会改变),这很糟糕,所以这会 默默地破坏你的应用程序。
来自Get frame from video with libvlc smem and convert it to opencv Mat. (c++)
如果是,那么 * 有没有其他 API 可以让我挂钩和获取缓冲区?
如果不是那么 * 我正在做的事情有什么问题,我需要做什么才能完成这项工作?
任何指针/示例程序都会有很大帮助。
PS:
- 这是我正在运行的完整代码https://pastebin.com/Dp8rSHuM &
- 日志文件输出https://pastebin.com/z5iVD0Jb
【问题讨论】:
标签: streaming video-streaming libvlc