vlc-android编译录像及截图功能

vlc-android的编译,就不累赘了,网上有很多资源,我参考的是https://blog.csdn.net/wkw1125/article/details/56845405.

编译出来的vlc发现延迟2秒左右,修改Media.java里面的

addOption(":network-caching=1500");

首先我们需要加入录像和截图功能的补丁https://patches.videolan.org/patch/606/,下载下来放在vlc里面,使用命令patch -p1 < xxxx.patch打上补丁,可能有些地方会失败,根据终端的提示,手动把失败的补丁加进去.由于vlc一直在更新,所以补丁里一些方法可能与版本有差异,编译会不通过,根据编译的报错查找相应的代码去修改即可.

接着在libvlcjni-mediaplayer.c中加入以下代码:

jboolean Java_org_videolan_libvlc_MediaPlayer_takeSnapShot(JNIEnv *env, jobject thiz,jint number, jstring path, jint width,jint height)  
    {  
        jboolean isCopy;  
       /*libvlc_media_player_t *mp = getMediaPlayer(env, thiz);  */
    vlcjni_object *p_obj = VLCJniObject_getInstance(env,thiz);
        libvlc_media_player_t *mp = p_obj->u.p_mp;
         /* Get C string */  
       const char* psz_path = (*env)->GetStringUTFChars(env, path, &isCopy);  
      
       if (mp)  
            if(libvlc_video_take_snapshot(mp, (int)number,psz_path , (int)width,(int)height)==0)  
                return JNI_TRUE;  
       return JNI_FALSE;  
      
    }  


jboolean Java_org_videolan_libvlc_MediaPlayer_videoRecordStart(JNIEnv *env, jobject thiz,jstring psz_filpath,jstring psz_filename)  
    {  
        jboolean isCopy;  
       /*libvlc_media_player_t *mp = getMediaPlayer(env, thiz); */
    vlcjni_object *p_obj = VLCJniObject_getInstance(env,thiz);
        libvlc_media_player_t *mp = p_obj->u.p_mp;
         /* Get C string */  
       const char* psz_path = (*env)->GetStringUTFChars(env, psz_filpath, &isCopy);  
       const char* psz_name=(*env)->GetStringUTFChars(env, psz_filename, &isCopy);  
       if (mp)  
            if(libvlc_media_player_record_start(mp,psz_path,psz_name)==0)  
                return JNI_TRUE;  
       return JNI_FALSE;  
    }  
      
    jboolean Java_org_videolan_libvlc_MediaPlayer_videoRecordStop(JNIEnv *env, jobject thiz)  
    {  
        jboolean isCopy;  
       /*libvlc_media_player_t *mp = getMediaPlayer(env, thiz); */
    vlcjni_object *p_obj = VLCJniObject_getInstance(env,thiz);
        libvlc_media_player_t *mp = p_obj->u.p_mp;
         /* Get C string */  
       if (mp)  
            if(libvlc_media_player_record_stop(mp)==0)  
                return JNI_TRUE;  
       return JNI_FALSE;  
    }  
      
    jboolean Java_org_videolan_libvlc_MediaPlayer_videoIsRecording(JNIEnv *env, jobject thiz)  
    {  
        jboolean isCopy;  
    vlcjni_object *p_obj = VLCJniObject_getInstance(env,thiz);
        libvlc_media_player_t *mp = p_obj->u.p_mp;
       if (mp)  
            if(libvlc_media_player_is_recording(mp))  
                return JNI_TRUE;  
       return JNI_FALSE;  
    }  
    jboolean Java_org_videolan_libvlc_MediaPlayer_videoIsRecordable(JNIEnv *env, jobject thiz)  
    {  
        jboolean isCopy;  
       /*libvlc_media_player_t *mp = getMediaPlayer(env, thiz);*/
    vlcjni_object *p_obj = VLCJniObject_getInstance(env,thiz);
        libvlc_media_player_t *mp = p_obj->u.p_mp;
       if (mp)  
            if(libvlc_media_player_is_recordable(mp))  
                return JNI_TRUE;  
       return JNI_FALSE;  
    }  
      
    jint Java_org_videolan_libvlc_MediaPlayer_getState(JNIEnv *env, jobject thiz)  
    {  
        /*libvlc_media_player_t *mp = getMediaPlayer(env, thiz);*/
    vlcjni_object *p_obj = VLCJniObject_getInstance(env,thiz);
        libvlc_media_player_t *mp = p_obj->u.p_mp;
        if (mp){  
            libvlc_state_t state=libvlc_media_player_get_state(mp);  
            return (jint)state;  
        }  
        else  
            return -1;  
    }  

其中的getMediaPlayer换成VLCJniObject_getINstance.

接着在java层Mediaplayer中添加相应的native方法并调用即可.

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值