问题描述
我想在Android的libVLC中使用媒体播放器播放字节流。但是我找不到可以“注入”字节流的任何接口或类。我唯一可以播放的机会是提供文件描述符,文件路径或URI。
Android的本机媒体播放器提供了接口 setDataSource(MediaDataSource dataSource),该接口可通过扩展MediaDataSource类来注入字节流。在Android的libVLC中是否有类似的可能性?
解决方法
您正在寻找的libVLC API是libvlc_media_new_callbacks。
但是,似乎当前没有将Java与Java流参数一起使用。我相信这需要您在libvlcjni绑定中实现。
您可以从使用该API的现有代码中获得启发
void
Java_org_videolan_libvlc_Media_nativeNewFromFdWithOffsetLength(
JNIEnv *env,jobject thiz,jobject libVlc,jobject jfd,jlong offset,jlong length)
{
vlcjni_object *p_obj;
int fd = FDObject_getInt(env,jfd);
if (fd == -1)
return;
p_obj = VLCJniObject_newFromJavaLibVlc(env,thiz,libVlc);
if (!p_obj)
return;
p_obj->u.p_m =
libvlc_media_new_callbacks(p_obj->p_libvlc,media_cb_open,media_cb_read,media_cb_seek,media_cb_close,p_obj);
if (Media_nativeNewCommon(env,p_obj) == 0)
{
vlcjni_object_sys *p_sys = p_obj->p_sys;
p_sys->media_cb.fd = fd;
p_sys->media_cb.offset = offset;
p_sys->media_cb.length = length >= 0 ? length : UINT64_MAX;
}
}
libvlcsharp已实现此功能,包括针对Android平台的实现,但它是.NET。