如何在Android的libVLC中播放字节流

问题描述

我想在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;
    }
}

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

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...