如何在 Android 的 libVLC 中播放字节流
How to play back a byte stream in libVLC for Android
我想用 libVLC 中的媒体播放器为 Android 播放字节流。但是我没有找到任何可以“注入”字节流的接口或 Class 。我播放的唯一机会是提供文件描述符、文件路径或 URI。
Android 的本机媒体播放器提供接口 setDataSource(MediaDataSource dataSource),其中可以通过扩展 class 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, thiz, 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。
我想用 libVLC 中的媒体播放器为 Android 播放字节流。但是我没有找到任何可以“注入”字节流的接口或 Class 。我播放的唯一机会是提供文件描述符、文件路径或 URI。
Android 的本机媒体播放器提供接口 setDataSource(MediaDataSource dataSource),其中可以通过扩展 class 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, thiz, 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。