libvlc 虽然很强大,但是他最大的问题是过于庞大使得程序会很大,特别移动端程序,android端有70多M,ios有40多M,最近研究了怎么去裁剪libvlc已达到相对合适的尺寸。

一.libvlc for android裁剪和编译

1.编译脚本buildsystem/compile-libvlc.sh裁剪

(1)VLC_CONFIGURE_ARGS参数介绍
–enable-avformat --enable-swscale --enable-avcodec
ffmpeg
libavformat:用于各种音视频封装格式的生成和解析,包括获取解码所需信息以生成解码上下文结构和读取音视频帧等功能,包含demuxers和muxer库。
libavcodec:用于各种类型声音/图像编解码。
libavutil:包含一些公共的工具函数。
libswscale:用于视频场景比例缩放、色彩映射转换。
libpostproc:用于后期效果处理。

–enable-live555 --enable-realrtsp
Live555 是一个为流媒体提供解决方案的跨平台的C++开源项目,它实现了对标准流媒体传输协议如RTP/RTCP、RTSP、SIP等的支持。Live555实现了对多种音视频编码格式的音视频数据的流化、接收和处理等支持,包括MPEG、H.263+、DV、JPEG视频和多种音频编码。同时由于良好的设计,Live555非常容易扩展对其他格式的支持

–enable-opus
Opus编码器 是一个有损声音编码的格式,由互联网工程任务组(IETF)进来开发,适用于网络上的实时声音传输,标准格式为RFC 6716。Opus 格式是一个开放格式,使用上没有任何专利或限制。

–enable-opensles
OpenSL ES全称为Open Sound Library for Embedded Systems,即嵌入式音频加速标准。OpenSL ES是无授权费、跨平台、针对嵌入式系统精心优化的硬件音频加速 API。它为嵌入式移动多媒体设备上的本地 应用程序开发者提供了标准化、高性能、低响应时间的音频功能实现方法,同时还实现了软/硬件音频性能的直接跨平台部署,不仅降低了执行难度,而且促进了高级音频市场的发展

–enable-matroska
libmatroska, 用于解析Matroska文件( mkv和mka )的C++ libary libmatroska用于解析和创建Matroska文件的C++ libary建筑和安装构建发布版本libmatroska基于autoconf和 automake

–enable-taglib
[JSP]自定义标签库taglib

–enable-dvbpsi
dvbpsi 数字电视TS流分析,是一个用于解码或者生成TS各种表的一个简单库

–enable-zvbi
libzvbi允许libavcodec解码DVB的teletext页面和DVB的teletext字幕

–enable-lua
c调用Lua代码,一种脚本语言

–enable-dvdread --enable-dvdnav
提供阅读DVD视频盘简单的基础,dvd相关库

–enable-bluray
蓝光原盘也叫bluray或blu-ray,简称BD,是目前流行的最高清片源格式,是DVD之后下一时代的高画质影音储存光盘媒体(可支持Full HD影像与高音质规格),其容量达到25G或50G,在速度上,蓝光的单倍1X速率为36Mbps,即4.5MB/S,允许1X~12X倍速的记录速度,即每秒4.5MB/S~54MB/S的记录速度

–enable-mpg123
mp3相关库

–enable-fluidlite
midi相关库

–enable-libass
libass库则是一个轻量级的对ASS/SSA格式字幕进行渲染的开源库

–enable-libxml2
xml解析库

–enable-gles2
图形库???

–enable-sout
vlc录制,截图使用的库

–enable-vorbis
Xiph 组织自行研发的音频压缩解压编码器,一般将 Vorbis 数据封装到 ogg 文件里面,这个库是用来解码和编码 Vorbis 音频数据的,ogg文件解码库

–enable-jpeg
LibJPEG 是一个广泛使用的 JPEG 图像压缩库,采用 C 语言开发

–enable-smb2
SMB(全称是Server Message Block)是一个协议名,它能被用于Web连接和客户端与服务器之间的信息沟通

(2)VLC_CONFIGURE_ARGS参数裁剪

--disable-opus \
--disable-taglib \
--disable-dvdread \
--disable-dvdnav \
--disable-bluray \
--disable-vorbis \
--disable-smb2 \

把这些参数去掉后,libvlc.so可能减少1M左右

2.ffmpeg裁剪

–enable-avformat --enable-swscale --enable-avcodec 是属于ffmpeg的参数,ffmpeg几乎占了libvlc.so(35M左右)的一半容量,我尝试过把这3个参数关闭,libvlc会缩减到20M多一点,但是你会发现大部分视频流都播放不了。因为是对ffmpeg内部参数进行优化,而不是直接去掉。

vlc/contrib/src/ffmpeg/rules.mak 是ffmpeg配置文件,其他插件配置的都在vlc/contrib/src里面,大家可以进去里面研究。

主要配置ffmpeg的FFMPEGCONF参数,我主要是去掉编码器,合成器,这些基本在播放器解码的时候很少用到。

--disable-encoders \
--disable-muxers \

编译完成后,libvlc.so变成31M左右

3.libvlc的局部编译

由于你需要不断修改libvlc里面各种参数,去优化vlc,每次的都所有架构去编译(sh buildsystem/compile.sh -l -a all -b),效率很低,下面介绍一下libvlc局部编译提高效率

1.文件目录介绍:
buildsystem/compile-libvlc.sh:libvlc编译脚本,命令为sh buildsystem/compile-libvlc.sh -a 架构标签
vlc/build-android-*:编译出来架构目录,so存放到ndk/libs目录里面
vlc/contrib/src:各种插件的配置和补丁
vlc/contrib/contrib-android-*:插件根据架构的修改过的源代码

2.局部编译示例
上面提到的ffmpeg裁剪,以armv7为例子,修改了vlc/contrib/src/ffmpeg/rules.mak,不能直接使用编译指令,需要先把vlc/build-android-arm-linux-androideabi删掉,在运行下面指令

buildsystem/compile-libvlc.sh -a arm

ffmpeg经常修改,也可以把vlc/contrib/contrib-android-arm-linux-androideabi删除,编译的过程中会把最新的插件版本下载下来

libvlc 裁剪及编译相关推荐

  1. Linux内核裁剪及编译

    Linux内核裁剪及编译可加载模块 一 Linux基础知识 linux内核组要由五个子系统组成: 进程调度 内存管理 文件系统 网络接口 进程间通信 Linux源码目录 arch    目录中包含于体 ...

  2. 嵌入式Linux内核配置、裁剪与编译浅析(ARM版)

    第一部分Linux内核裁减 (1)安装新内核: i)将新内核copy到/usr/src下并解压: #tar -zxvf linux-2.6.38.4.tar.gz ii) 将名为linux的符号链接删 ...

  3. linux内核裁剪,编译,移植---目标板FS2410----未完成

    现在21:20,争取今天把内核烧进去,应该不难吧..... 先看看内核的裁剪与编译. 基本步骤: 1.建立交叉编译环境,这步在之前已经完成,使用交叉编译工具链:arm-linux-gcc-4.4.3. ...

  4. Cropper – 简单的 jQuery 图片裁剪插件

    Cropper 是一个简单的 jQuery 图像裁剪插件.它支持选项,方法,事件,触摸(移动),缩放,旋转.输出的裁剪数据基于原始图像大小,这样你就可以用它们来直接裁剪图像. 如果你尝试裁剪跨域图像, ...

  5. Croppic – 免费开源的 jQuery 图片裁剪插件

    Croppic 这款开源的 jQuery 图片裁剪插件能够满足网站开发人员各种不同的使用需要.只需要简单的上传图片,就可以实现你想要的图像缩放和裁剪功能.因为使用了 HTML5 FormData  对 ...

  6. 【HUST】网安|操作系统实验|实验一 内核编译、系统调用、编写批处理脚本

    文章目录 目的 任务 前言 一.linux内核编译 非常靠谱的两篇参考文章: 补注: 总结 二.添加新的系统调用 特别靠谱的参考文章: 补注: 1. 我修改的文件: 2. 图中需要敲入的全部代码: 3 ...

  7. Rockchip Android平台内存优化及系统裁剪

    Rockchip Android平台内存优化及系统裁剪 文章目录 Rockchip Android平台内存优化及系统裁剪 编译32bit的Android系统 启用Android GO的配置 系统裁剪 ...

  8. linux启动优化 内核裁剪详细说明(2)

    第一部分Linux内核裁减 (1)安装新内核: i)将新内核copy到/usr/src下并解压: #tar -zxvf linux-2.6.38.4.tar.gz ii) 将名为linux的符号链接删 ...

  9. 如何裁剪linux内核

    Linux内核裁减 (1)安装新内核: i)将新内核copy到/usr/src下, #tar xzvf linux-2.6.38.4.tar.gz -----解压缩. ii) 将名为linux的符号链 ...

  10. 第四章-linux内核裁剪与移植

    内核:为底层可编程部件提供服务,为上层app提供执行环境 裁剪:裁剪功能,选取满足特定平台和需求的功能 4.1 内核结构     模块化,文件目录形式,方便裁剪,编译     4.1.1主要组成    ...

最新文章

  1. Eclipse中的checkstyle插件
  2. 每天学一点Scala之 高阶函数 flatten
  3. iOS - AsyncSocket 的使用
  4. python 月活_TikTok用户月活超1亿意味着什么?什么是月活用户?
  5. React中的fragment和StrictMode
  6. postfix+web页面+身份验证
  7. 2440/6410+minitools+superboot烧写裸机新方法!
  8. emos mysql_企业邮件部署详细步骤(EMOS)
  9. 正确的电源纹波测试方法
  10. python篇 006-- pycharm vsc 编写python(对比浅析混合使用) pycharm篇
  11. Android简单的集成腾讯视频播放器
  12. Vue获取当前的位置信息、经纬度
  13. Camunda流程引擎 Modeler (二)
  14. ARP协议(三)ARP防御篇
  15. 淘宝店小蜜配置手册——店小蜜收费策略及应对方案
  16. ios添加 启动画面_iOS 两种设置启动图方式的 bug 汇总
  17. 量子涡轮服务器原理,纯mek用一个泵跑满涡轮——水冷聚变堆的搭建
  18. 【Web】多读书多看报
  19. 三相同步电动机的平衡方程式
  20. 软件测试的类型有哪几种?

热门文章

  1. 用虚拟化平台建NAS服务器,虚拟化之NAS存储
  2. codeforce 1260
  3. P2619 [国家集训队]Tree I(wqs二分)
  4. 猿创征文|Apache ShenYu网关插件介绍
  5. Intellij IDEA 插件下载慢或无法查询
  6. 软件架构之前后端分离与前端模块化发展史
  7. Echarts地图案例
  8. 如何删除07版word页眉页脚的横线
  9. 图像美学质量评价技术综述
  10. mac mysql 移动硬盘_MAC上安装Fuse for macOS以支持读取NTFS格式的移动硬盘