libvlc_media_open_cb正确使用及内存媒体播放实现技术咨询
使用libvlc从内存播放媒体:libvlc_media_new_callbacks 实践
最近我在折腾用libvlc从内存里直接播放媒体,用到了libvlc_media_new_callbacks这个函数——它要求必须传入四个回调函数的指针:Open、Read、Seek和Close。下面是我写的相关代码声明和调用片段:
Declare Function libvlc_media_new_callbacks Lib "libvlc.dll" (Instance As Ptr, OpenCB As Ptr, ReadCB As Ptr, SeekCB As Ptr, CloseCB As Ptr, Opaque As Ptr) As Ptr Dim opaque As Ptr = SomeOpaqueValue() Dim handle As Ptr = libvlc_media_new_callbacks(instance, AddressOf MediaOpen, AddressOf MediaRead, AddressOf MediaSeek, AddressOf MediaClose, opaque)
这里还有几个需要注意的点,分享给大家:
- 一定要保证四个回调函数的签名完全匹配libvlc的要求,不然很容易出现程序崩溃或者异常行为
opaque指针是用来传递自定义上下文的好工具,比如我们可以把内存中的媒体缓冲区、当前读写位置这些数据打包进去,这样在各个回调函数里都能方便地访问到- 每个回调的职责要划分清楚:
- OpenCB:负责初始化媒体读取的上下文,比如确认内存缓冲区有效、记录初始的读写位置
- ReadCB:核心是从内存缓冲区里读取指定字节数的数据,输出到libvlc要求的缓冲区中
- SeekCB:处理媒体的跳转需求,调整内存中的读取位置,支持快进、快退操作
- CloseCB:最后别忘了清理自定义的上下文资源,避免出现内存泄漏的问题
内容的提问来源于stack exchange,提问作者Andrew Lambert
相关产品推荐
相关产品推荐

