3

Android vlc アプリで MediaPlayer バッファリング イベントをサブスクライブしたいと思います。

EventHandler クラスを編集し、イベント定数のコメントを外しました。

public static final int MediaPlayerBuffering            = 0x103; // ** uncommented this**
public static final int MediaPlayerPlaying                = 0x104;

次に、変数を libvlcjni.c に追加しました

libvlc_event_manager_t *ev = libvlc_media_player_event_manager(mp);
static const libvlc_event_type_t mp_events[] = {
    libvlc_MediaPlayerPlaying,
    libvlc_MediaPlayerPaused,
    libvlc_MediaPlayerEndReached,
    libvlc_MediaPlayerStopped,
    libvlc_MediaPlayerVout,
    libvlc_MediaPlayerPositionChanged,
    libvlc_MediaPlayerEncounteredError,
    libvlc_MediaPlayerBuffering // **added this here**
};

jniを再コンパイルしてsoファイルを取得し、vlcアプリをビルドしましたが、イベントが発生することはありません。

帯域幅不足のためにバッファリングイベントが発生したときにイベントを発生させるためにリンクする必要がある場所は他にありますか。

logcat を見ると、1001 ミリ秒が 6 ミリ秒でバッファリングされていることがわかります。しかし、それはJavaレイヤーではなく、下位レイヤーからのものです

4

2 に答える 2

4

これを libvlcjni.c ファイルに追加する必要がありました

else if(ev->type == libvlc_MediaPlayeBuffering) {
    /* For determining the vout/ES track change */
    jstring sData = (*env)->NewStringUTF(env, "data");
    (*env)->CallVoidMethod(env, bundle, putFloat, sData, ev->u.media_player_buffer.new_cache);
    (*env)->DeleteLocalRef(env, sData);
}

これが誰かを助けることを願っています

于 2013-06-25T19:29:44.780 に答える
2

else if(ev->type == libvlc_MediaPlayerBuffering) { /* For determining the vout/ES track change */ jstring sData = (*env)->NewStringUTF(env, "data"); (*env)->CallVoidMethod(env, bundle, putFloat, sData, ev->u.media_player_buffering.new_cache); (*env)->DeleteLocalRef(env, sData); }

答えは ev->u.media_player_buffering.new_cache です

VLC ファイル mediaPlayer.c で、次のコードを見つけました。

`else if( newval.i_int == INPUT_EVENT_CACHE )
   {
    event.type = libvlc_MediaPlayerBuffering;
    event.u.media_player_buffering.new_cache = (int)(100 * var_GetFloat( p_input, "cache" ));
    libvlc_event_send( p_mi->p_event_manager, &event );
}

`

および libvlc_events.h で

/* media instance */ struct { float new_cache; } media_player_buffering;

それから、私はそれをコンパイルしました、そしてそれはうまくいきました。海岸の私の少年トレーシーに感謝します!

于 2013-08-02T06:24:13.387 に答える