vlc android的编译及截图,录制视频等功能

2023-10-27

编译的环境是ubuntu 12.04,要安装好java,配置好环境变量,按照http://wiki.videolan.org/AndroidCompile配置好,就可以编译了。

[plain]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. export JAVA_HOME=/home/sunlit/jdk1.6.0_38/  
  2. export PATH=$JAVA_HOME/bin:$PATH  
  3. export classPath=/home/sunlit/jdk1.6.0_38/  
  4. export ANDROID_SDK=/home/sunlit/sdk  
  5. export ANDROID_NDK=/home/sunlit/android-ndk-r8c  
  6. export PATH=$PATH:$ANDROID_SDK/platform-tools:$ANDROID_SDK/tools  
  7. export ANDROID_ABI=armeabi-v7a  


2014/03/26日更新开始


在ubuntu下编译vlc  https://wiki.videolan.org/AndroidCompile/
     安装工具
          sudo apt-get install ant autoconf automake autopoint cmake gawk gcc g++ libtool m4 patch pkg-config ragel subversion yasm git
     切换vlc android 版本到 0.1.x-bugfix
           git clone  git://git.videolan.org/vlc-ports/android.git
           cd android
           git branch -r
           git checkout 0.1.x-bugfix


2014/03/26日更新结束

为了在android vlc上增加截图和保存视频的功能

截图:

要对android/configure.sh进行修改 删掉其中的-disable-sout

另外保存图片为png格式,需要让ffmpeg增加-enable-encoder=png的编码器(在android/vlc/contrib/src/ffmpeg/rules.mak中修改)


2014/03/26日更新开始

 FFMPEGCONF += --disable-encoders --disable-muxers

               ->FFMPEGCONF += --disable-encoders --enable-encoder=png

2014/03/26日更新结束


在libvlcjni.c中增加函数:

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. jboolean Java_org_videolan_libvlc_LibVLC_takeSnapShot(JNIEnv *env, jobject thiz,jint number, jstring path, jint width,jint height)  
  2. {  
  3.     jboolean isCopy;  
  4.    libvlc_media_player_t *mp = getMediaPlayer(env, thiz);  
  5.      /* Get C string */  
  6.    const char* psz_path = (*env)->GetStringUTFChars(env, path, &isCopy);  
  7.   
  8.    if (mp)  
  9.         if(libvlc_video_take_snapshot(mp, (int)number,psz_path , (int)width,(int)height)==0)  
  10.             return JNI_TRUE;  
  11.    return JNI_FALSE;  
  12.   
  13. }  


在LibVlc.java中增加native函数的接口

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. private native boolean takeSnapShot( int num, String file, int width, int height);  
和调用方法

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. public boolean takeSnapShot(String file, int width, int height) {  
  2.     return takeSnapShot(0, file, width, height);  
  3. }  


编译后就可以使用。调用LibVlc.java中的takeSnapShot就可以实现截图了。

录制视频:

2014/03/26日更新开始

  • 打上视频录制的补丁 https://patches.videolan.org/patch/606/
    • 把patch文件放到/android/vlc中 使用命令patch -p1 < xxxx.patch  查出其中的失败的地方 手动修改
  • 修改vlc-android/jni/libvlcjni.c
    在文件末尾添加
  • [cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
    1. jboolean Java_org_videolan_libvlc_LibVLC_takeSnapShot(JNIEnv *env, jobject thiz,jint number, jstring path, jint width,jint height)  
    2. {  
    3.     jboolean isCopy;  
    4.    libvlc_media_player_t *mp = getMediaPlayer(env, thiz);  
    5.      /* Get C string */  
    6.    const char* psz_path = (*env)->GetStringUTFChars(env, path, &isCopy);  
    7.   
    8.    if (mp)  
    9.         if(libvlc_video_take_snapshot(mp, (int)number,psz_path , (int)width,(int)height)==0)  
    10.             return JNI_TRUE;  
    11.    return JNI_FALSE;  
    12.   
    13. }  
    14.   
    15. jboolean Java_org_videolan_libvlc_LibVLC_videoRecordStart(JNIEnv *env, jobject thiz,jstring path)  
    16. {  
    17.     jboolean isCopy;  
    18.    libvlc_media_player_t *mp = getMediaPlayer(env, thiz);  
    19.      /* Get C string */  
    20.    const char* psz_path = (*env)->GetStringUTFChars(env, path, &isCopy);  
    21.    //const char* psz_filename=(*env)->GetStringUTFChars(env, filename, &isCopy);  
    22.    if (mp)  
    23.         if(libvlc_media_player_record_start(mp,psz_path)==0)  
    24.             return JNI_TRUE;  
    25.    return JNI_FALSE;  
    26. }  
    27.   
    28. jboolean Java_org_videolan_libvlc_LibVLC_videoRecordStop(JNIEnv *env, jobject thiz)  
    29. {  
    30.     jboolean isCopy;  
    31.    libvlc_media_player_t *mp = getMediaPlayer(env, thiz);  
    32.      /* Get C string */  
    33.    if (mp)  
    34.         if(libvlc_media_player_record_stop(mp)==0)  
    35.             return JNI_TRUE;  
    36.    return JNI_FALSE;  
    37. }  
    38.   
    39. jboolean Java_org_videolan_libvlc_LibVLC_videoIsRecording(JNIEnv *env, jobject thiz)  
    40. {  
    41.     jboolean isCopy;  
    42.    libvlc_media_player_t *mp = getMediaPlayer(env, thiz);  
    43.    if (mp)  
    44.         if(libvlc_media_player_is_recording(mp))  
    45.             return JNI_TRUE;  
    46.    return JNI_FALSE;  
    47. }  
    48. jboolean Java_org_videolan_libvlc_LibVLC_videoIsRecordable(JNIEnv *env, jobject thiz)  
    49. {  
    50.     jboolean isCopy;  
    51.    libvlc_media_player_t *mp = getMediaPlayer(env, thiz);  
    52.    if (mp)  
    53.         if(libvlc_media_player_is_recordable(mp))  
    54.             return JNI_TRUE;  
    55.    return JNI_FALSE;  
    56. }  
    57.   
    58. jint Java_org_videolan_libvlc_LibVLC_getState(JNIEnv *env, jobject thiz)  
    59. {  
    60.     libvlc_media_player_t *mp = getMediaPlayer(env, thiz);  
    61.     if (mp){  
    62.         libvlc_state_t state=libvlc_media_player_get_state(mp);  
    63.         return (jint)state;  
    64.     }  
    65.     else  
    66.         return -1;  
    67. }  

2014/03/26日更新结束


送佛送到西 源码下载地址http://pan.baidu.com/s/17Y4dO



本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

vlc android的编译及截图,录制视频等功能 的相关文章

  • 使用arm-linux-gnueabi-gcc为Android交叉编译静态C hello world

    我想使用 arm linux gnueabi gcc 从 C 构建静态 hello world 而不是使用 NDK 独立工具链或 Codesourcery 在Ubuntu中 我做了以下事情 sudo apt get install gcc
  • Android Studio 拒绝运行 main()

    重现步骤 在Android Studio中启动一个新项目 使用最新更新 创建一个新类并像往常一样添加 main 右键单击类以运行 main 作为测试 package test public class Test public static
  • Android - 如何创建可点击的列表视图?

    我想让列表视图中的所有列表项打开到一个新页面 因此每个列表视图项目都打开到一个我可以使用的新黑色页面 我根本不知道如何实现这个 我已经连续搜索了几个小时 但找不到解决方案的答案 如果有人能够展示和 或解释如何执行此操作而不是提供链接 我们将
  • Android:如何测试自定义视图?

    Android 中有多种单元测试方法 测试我编写的自定义视图的最佳方法是什么 我目前正在将其作为仪器测试用例活动的一部分进行测试 但我宁愿只测试孤立的视图 对于缺乏以视图为中心的测试用例实现的一个简单解决方案是在包含视图的测试项目中创建一个
  • 谷歌地图 API 的替代品 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 Locked 这个问题及其答案是locked help locked posts因为这个问题是题外话 但却具有历史意义 目前不接受新的答案
  • Android 中的计时器任务在无限期时间后停止运行

    我是安卓新手 我正在开发一个应用程序 其中一段特定的代码在后台每 5 秒后执行一次 为了实现这一目标 我使用带有定时器的服务 其中包含定时器任务 有时它工作正常 但经过一段时间后 我的服务正在运行 但计时器任务在 android 中自动停止
  • 无法解析符号“AuthUI”

    我正在添加 firebase google 和 Gmail 登录 但是当我粘贴代码时 onAuthStateChanged NonNull FirebaseAuth firebaseAuth 方法我收到此错误 无法解析符号 AuthUI 在
  • 安卓写入文件

    经过几周的不编程之后 我决定完成我的应用程序 上次我无法进行文件写入和读取 现在我想做 我也许可以使用数据库 但这似乎容易得多 我已经发现this http narenst wordpress com 2010 01 25 android
  • 单元测试定位服务

    我有一个位置跟踪服务 正在尝试对其进行单元测试 我正在尝试使用 locationManager addTestProvider 和 setTestProviderLocation 方法来实现此目的 但是 我似乎无法通过提供程序获取任何位置并
  • Android 4.4 (kitkat) 版本中的短信阻止和允许问题

    我们在 Google Play 上推出了短信拦截应用程序 如果满足任何阻止条件 它就会阻止短信 否则我们允许短信发送到本机收件箱 它在除 android 4 4 Kitkat 之外的所有版本上都运行良好 我们尝试实现适用于 4 4 的新短信
  • 如何从号码选择器中跳过某些号码?

    选号器 np NumberPicker findViewById R id numberPicker1 np setMaxValue 200 np setMinValue 1 Button b Button findViewById R i
  • DP5 7.0 - 向待处理意图添加额外内容是否会失败?

    在跟踪器上添加链接的问题 因此 我今天在我的 Nexus 5X 上安装了 DP5 Android 7 0 版本 我一直在开发一个应用程序 它使用 Android 的 AlarmManager 类在特定时间安排本地通知 在此版本之前 代码在运
  • Android 中带有传递参数的点击侦听器方法

    我是 Android 和 Java 新手 我想创建一个带有 int 参数的 onClick 方法 所以这是我的尝试 public void randomClick final int randomIndex private OnClickL
  • Android SearchView 自定义

    我是 Android 新手 我被困在一些我认为很简单但我很困惑的事情上 我需要不在操作栏 工具栏中而是在我的相对布局中创建自定义 searchView 问题是我不知道如何自定义背景 文本输入颜色 XML 中的搜索图标颜色 或者只是它们的属性
  • 滑动抽屉上的按钮? - 安卓

    好吧 我已经在我正在构建的 Android 应用程序中的滑动抽屉上实现了一个按钮 唯一的问题是 当我按下按钮时 整个滑动抽屉都会被按下并向上滑动 我知道我可以在 XML 中禁用 按向上滑动 但这似乎不起作用 因为滑动抽屉仍然在没有向上滑动的
  • 加入牛轧糖热点

    我的应用程序有 2 个按钮 一个用于创建热点 另一个用于加入热点 流程是 我在其中一台设备上创建一个热点 然后尝试将其与其他设备连接 通过我的应用程序 问题是 有时我无法加入由 Nougat 设备创建的热点 它会卡在 获取 IP 地址 上
  • 从字符串中删除特定字符[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 如何从字符串中删除特定字符 我有一个 Arraylist 测试数组 String line testingarray get index
  • ACTION_MEDIA_BUTTON 的广播接收器不起作用

    我正在为 Android 操作系统版本 4 0 3 ICS 编写 Android 应用程序 问题是我没有从 BroadcastReceiver 的 onReceive 方法中的 Log d 获得输出 这意味着我的应用程序没有正确处理广播 我
  • 查看 Android 应用程序的共享首选项?

    当我在 Eclipse 中处理我的应用程序时 有没有办法在模拟器中调试时查看我对应用程序的共享首选项所做的更改 提前致谢 在模拟器中运行项目 然后从 Eclipse 选择菜单 Windows gt 打开透视图 gt DDMS 从选项卡设备中
  • SDK管理器不显示示例包选项

    我关注的是安卓安装示例的开发人员链接 http developer android com tools samples index html包裹 但是 当我展开Android平台的包列表时 没有 SDK示例 选项 复选框 可用 为什么 我已

随机推荐

  • 如何在 Fedora 上安装 phpMyAdmin

    phpMyAdmin是一个流行的基于 Web 的客户端 用于管理 MySQL 服务器 phpMyAdmin 是用 PHP 编程语言编写的 它提供了一个用户友好的 Web 界面来访问和管理 MySQL 服务器和数据库 它允许您创建数据库和用户
  • 如何在 Ubuntu 上安装最新的 Node.js

    如果您一直在探索前端和 JavaScript 的世界 您可能已经遇到过 Node js 它是一个服务器端框架 使用 Google 的 V8 引擎来执行 JavaScript 代码 开发人员可以使用 Node js 因为它为他们提供了一种使用
  • 如何在 Windows 上安装 NVM

    NVM 节点版本管理器 是用于在系统上安装 Node js 的命令行实用程序 它允许我们安装多个 Node js 版本并在它们之间切换 这对于运行需要不同 2 个节点版本的多个节点应用程序的系统很有帮助 本教程将帮助您使用 NVM 在 Wi
  • 如何在 Linux Mint 上安装 Apache Solr 21/20

    Apache Solr 是一个基于 Java 构建的强大的开源搜索平台 它广泛用于索引 搜索和分析大量文本内容 在 Linux Mint 上安装它非常简单 在本指南中 我们将逐步完成在 Linux Mint 21 20 或 19 上安装并运
  • 如何在 Ubuntu 20.04 上安装 Nagios

    Nagios 是一个流行的开源监控系统 Nagios 保留整个 IT 基础设施的清单 并确保您的网络 服务器 应用程序 服务和流程正常运行 如果发生故障或性能不佳 Nagios 将通过各种方法发送通知警报 本文介绍如何在 Ubuntu 20
  • 如何在 Ubuntu 20.04 上设置或更改时区

    使用正确的时区对于许多与系统相关的任务和流程至关重要 例如 cron 守护进程使用系统的时区来执行 cron 作业 并且日志文件中的时间戳基于同一系统的时区 在 Ubuntu 上 系统的时区是在安装过程中设置的 但以后可以轻松更改 本文介绍
  • Linux 中的粘贴命令(合并行)

    paste是一个允许您水平合并文件行的命令 它输出由指定为参数的每个文件的顺序对应行组成的行 并用制表符分隔 在本教程中 我们将解释如何使用paste命令 如何使用paste命令 paste是鲜为人知且较少使用的 Linux 和 Unix
  • 如何在 CentOS 7 上安装 Memcached

    Memcached 是一个免费开源的高性能内存键值数据存储 它主要用作缓存系统 通过缓存数据库调用结果中的各种对象来加速应用程序 在本教程中 我们将解释如何在 CentOS 7 上安装和配置 Memcached 先决条件 在继续本教程之前
  • 如何在 Ubuntu 18.04 上安装 Apache Maven

    Apache Maven 是一个免费的开源项目管理和理解工具 主要用于 Java 项目 Maven 使用项目对象模型 POM 它本质上是一个 XML 文件 其中包含有关项目 配置详细信息 项目依赖项等的信息 在本教程中 我们将向您展示在 U
  • 如何在 Ubuntu 18.04 上安装和使用 Wine

    Wine 是一个开源兼容层 允许您在类 Unix 操作系统 例如 Linux FreeBSD 和 macOS 上运行 Windows 应用程序 Wine代表 Wine 不是模拟器 它是一个将 Windows 系统调用转换为 Linux 和其
  • 如何在 Bash 中比较字符串

    在编写 Bash 脚本时 您经常需要比较两个字符串以检查它们是否相等 当两个字符串具有相同的长度并且包含相同的字符序列时 它们相等 本教程介绍如何在 Bash 中比较字符串 比较运算符 比较运算符是比较值并返回 true 或 false 的
  • 在 CentOS 8 上安装 Odoo 14

    Odoo 是世界上最受欢迎的一体化商业软件 它提供一系列业务应用程序 包括 CRM 网站 电子商务 计费 会计 制造 仓库 项目管理 库存等等 全部无缝集成 Odoo根据使用案例和可用技术 可以以不同的方式安装 安装 Odoo 最简单快捷的
  • 如何在 CentOS 7 上使用 Apache 安装 WordPress

    WordPress 是全球最受欢迎的开源博客和 CMS 平台 为当今互联网上四分之一的网站提供支持 它基于 PHP 和 MySQL 并包含大量可以通过免费和高级插件和主题进行扩展的功能 WordPress 是创建在线商店 网站或博客的最简单
  • 如何在 Ubuntu 20.04 上安装 Tomcat 9

    本教程介绍如何在 Ubuntu 20 04 上安装和配置 Tomcat 9 Apache Tomcat 是一个开源 Web 服务器和 Java Servlet 容器 它是构建基于 Java 的网站和应用程序的最流行的选择之一 Tomcat
  • 如何在 Ubuntu 18.04 上使用 VSFTPD 设置 FTP 服务器

    FTP 文件传输协议 是一种标准网络协议 用于在远程网络之间传输文件 有许多可用于 Linux 的开源 FTP 服务器 最流行和最广泛使用的是PureFTPd ProFTPD and vsftpd 在本教程中 我们将安装 vsftpd 非常
  • Linux 中的取消链接命令(删除文件)

    在本文中 我们将向您展示如何使用 GNU Linux 系统中的删除文件unlink命令 删除文件unlink unlink是一个用于删除单个文件的命令行实用程序 的语法unlink命令如下 unlink filename Where fil
  • CentOS部署kvm虚拟化机器

    操作步骤 部署kvm环境 将系统ISO镜像拉入宿主机后 进行KVM虚拟机安装 结构图 为虚拟机添加一块2G磁盘 更改虚拟机网络使用桥接模式 为关机状态虚拟机创建快照 部署kvm环境 创建虚拟化服务的宿主机操作系统 安装时候两种选择方式 都可
  • 前端页面自适应设置

    1 前端响应式布局的目的 适应不同尺寸设备 使页面展示效果更好 2 rem 原理 根据UI设计稿和设备尺寸的大小比例 动态计算并更改html根元素字体大小 页面使用rem单位自适应缩放 对于一些引入的库 例如swiper antd caro
  • postman拦截浏览器请求

    postman可以去浏览器请求进行拦截 并将请求存放至集合 原理 postman内部有捕获http请求流量的代理 postman app 监听这客户端程序或者设备发出的调用请求 postman 代理端会捕获到请求并把它转发到服务器 服务器将
  • vlc android的编译及截图,录制视频等功能

    编译的环境是ubuntu 12 04 要安装好java 配置好环境变量 按照http wiki videolan org AndroidCompile配置好 就可以编译了 plain view plain copy export JAVA