【原创】libvlc集成 并添加截图和录制功能

原文链接: https://blog.csdn.net/qw345/article/details/122252489

Demo参考

你可以选择两种方式集成到项目中。项目地址:https://github.com/spiritedRunning/VLCLibClient

1. 源码+so

添加一个android library, 注意包名一定要和JNI的签名匹配,不能修改

并将libvlc目录下的源码文件拷贝到创建的工程中, 下图高亮部分
image

并把编译好的lib库放到对应目录
image

2. aar集成

或者直接集成aar到项目中
image

截图

libvlc默认是不带截图功能的,需要手动添加代码
/libvlc/src/org/videolan/libvlc/MediaPlayer.java中添加

//参数number:视频标识(默认为0),path:存放的路径,width:视频宽(为0时代表原始宽),height:高(为0时代表原始高)
public boolean takeSnapShot(int number, String path, int width, int height) {
     return nativeTakeSnapShot(number, path, width, height);
}

private native boolean nativeTakeSnapShot(int number, String path, int width, int height);

/libvlc/jni/libvlcjni-mediaplayer.c中增加实现

jboolean
Java_org_videolan_libvlc_MediaPlayer_nativeTakeSnapShot(JNIEnv *env, jobject thiz,jint number, jstring path, jint width, jint height)
{
      vlcjni_object *p_obj = VLCJniObject_getInstance(env, thiz);
      const char* psz_path = (*env)->GetStringUTFChars(env, path, 0);

      int res = libvlc_video_take_snapshot(p_obj->u.p_mp, (int)number,psz_path , (int)width,(int)height);
      if(res == 0) return true;
      LOGE("libvlc_video_take_snapshot(%s,%d)", psz_path, res);

      if (psz_path)
      {
         (*env)->ReleaseStringUTFChars(env, path, psz_path);
      }
      return false;
}

并且代码中要设置不开启硬解,才能截图和录制
image

然后要注销掉setHWDecoderEnabled方法中的addOptions, 否则播放会有问题
image

录制

需要手动添加上下面两个patch
image

重新编译生成so库放到项目中

效果展示

代码也比较简单,不出意外的话,可以显示出截图和录制了
image

同时可以尝试调整参数来调节播放的流畅度

ArrayList<String> args = new ArrayList<>();
args.add("--rtsp-tcp"); //强制rtsp-tcp,加快加载视频速度
args.add("--live-caching=0");
args.add("--file-caching=0");
args.add("--network-caching=200");
libVlc = new LibVLC(this, args);

测试

可用的rtsp 测试地址:

rtsp://rtsp.stream/movie
rtsp://rtsp.stream/pattern
https://github.com/RSATom/rtsp-test-server

参考

音视频应用–VLC-Android截图和录制
基于libvlc aar的android截屏和录制视频功能

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值