如何在 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;
    }
}

https://github.com/videolan/vlc-android/blob/f05db3f9b51e64061ff73c794e6a7bfb44f34f65/libvlc/jni/libvlcjni-media.c#L284-L313

libvlcsharp 已实现此功能,包括 Android 平台,但它是 .NET。