# 交叉编译VLC 4.0播AVS3_AVS2_CAVS视频_有EXE下载 VLC4 capable of playing AVS3_AVS2_CAVS videos
**Repository Path**: wh233/AVS123_VLC4_Player
## Basic Information
- **Project Name**: 交叉编译VLC 4.0播AVS3_AVS2_CAVS视频_有EXE下载 VLC4 capable of playing AVS3_AVS2_CAVS videos
- **Description**: 创建VLC 4.0播放AVS3/AVS2/CAVS视频 (VLC4 capable of playing AVS3/AVS2/CAVS videos)
- **Primary Language**: C++
- **License**: GPL-3.0
- **Default Branch**: master
- **Homepage**: https://gitee.com/zhengtianbo/AVS123_VLC4_Player/releases
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 4
- **Created**: 2020-12-30
- **Last Updated**: 2022-05-24
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
VLC 4.0增AVS3及AVS3和CAVS视频解码, 基于https://gitee.com/hwren/vlc-4-win_avs2.
下载已编译VLC 4.0 播放器:https://gitee.com/zhengtianbo/AVS123_VLC4_Player/releases
下载VLC 4.0 播放器源码,补丁及已编译版:https://gitee.com/zhengtianbo/vlc-avs2-avs3
本库演示VLC增解码器两法, 提升参考价值.
<法一> 实现VLC解码接口如本库中AVS2.
本库AVS2接口文件为davs2.c. 若非ffmpeg性能不佳或含故障则不考虑此法.
<法二> 启用ffmpeg解码, 如本库中AVS3及CAVS(非AVS+).
此法用ffmpeg所含解码器, 也应适用其他编码. 省重复如<法一>中为不同应用编写解码器. 以此法开启AVS3时自建ffmpeg是关键.
自建VLC参考步骤:
一 安装Docker.
二 建立本地目录如i:\temp\prefix及i:\temp\build\ml.
三 启动Docker下载并运行Linux系统映像.
```
docker run --rm -it -v i:\temp\prefix:/prefix -v i:\temp\build:/build registry.videolan.org:5000/medialibrary-win64 /bin/bash
cd /build
mkdir ml
```
注意!使用videolan所提供映像, 是为提高VLC编译成功率, 否则倒腾一周也不一定能看到半个VLC.exe文件 . 开源编译环境, 坑洼太多.
四 搭建编译环境
```
TARGET_TRIPLE=x86_64-w64-mingw32 && \
cd /build/ml && \
git clone --depth=1 https://gitee.com/zhengtianbo/vlc-avs2-avs3.git && \
cd vlc-avs2-avs3 && \
cd extras/tools && ./bootstrap && make -j`nproc` && \
make -j`nproc` .buildlibtool .buildcmake .buildmeson
```
结果放入I:\temp\build\ml\vlc-avs2-avs3\extras\tools\build\bin.
五 编译DAVS2解码库, 供VLC解码接口文件davs2.c使用. 注:CAVS在ffmpeg已有,无需单独编译.ffmpeg本含AVS2但致VLC崩溃,故而另建.
```
cd /build/ml
git clone https://github.com/pkuvcl/davs2.git
cd davs2/build/linux
./configure --cross-prefix=x86_64-w64-mingw32- --host=$TARGET_TRIPLE --prefix=/build/ml/vlc-avs2-avs3/contrib/x86_64-w64-mingw32 --enable-pic
make -j4
make install
```
结果放于I:\temp\build\ml\vlc-avs2-avs3\contrib\x86_64-w64-mingw32
六 编译uavs3d解码库, 供ffmpeg解码接口文件libuavs3d.c使用, 过程稍显复杂.
(1) 先安装gawk:
```
apt-get update
apt-get install gawk #提示libcc6-s1之类未安装.
apt-get install xxxxx #提示缺什么,安装什么.
apt-get install yyyyy
...
...
apt-get install gawk #直到可以成功安装gawk
```
(2) 下载uavs3d
```
cd /build/ml
git clone https://github.com/uavs3/uavs3d.git #下载uavs3d
cd uavs3d
```
若需支持10位, 将"\uavs3d\source\decore\com_def.h"中BIT_DEPTH改为10. 10位库可解码8位及10位视频.
(3) 生成编译工程makefile
```
mingw_w64_x86_64_prefix=/build/ml/vlc-avs2-avs3/contrib/x86_64-w64-mingw32
cross_prefix=x86_64-w64-mingw32-
cmake -DCMAKE_C_COMPILER=x86_64-w64-mingw32-gcc -DCMAKE_SYSTEM_NAME=Windows -DCMAKE_SYSTEM_PROCESSOR=AMD64 -DENABLE_SHARED=0 -DCMAKE_INSTALL_PREFIX=/build/ml/vlc-avs2-avs3/contrib/x86_64-w64-mingw32
```
需将"I:\temp\build\ml\uavs3d\source\CMakeLists.txt"中C编译器参数用-fno-PIC替换-fPIC后编译:
```
make -j`nproc`
make install
```
结果放于I:\temp\build\ml\vlc-avs2-avs3\contrib\x86_64-w64-mingw32.
(4) 清除gawk.
确认uavs3d文件在I:\temp\build\ml\vlc-avs2-avs3\contrib\x86_64-w64-mingw32的lib/include/packages后, 需要清除gawk, 否则下步编译支持库及VLC卡壳. 开源编译环境散乱无章, 费事查错不如推倒重来.
```
exit #暂时退出docker
docker images #表列现有映像
docker image rm registry.videolan.org:5000/medialibrary-win64 #删除VLC编译环境映像
docker run --rm -it -v i:\temp\prefix:/prefix -v i:\temp\build:/build registry.videolan.org:5000/medialibrary-win64 /bin/bash #重载崭新映像.
```
七 编译支持库
注意!davs2及uavs3d须在其他支持库前编译,否则此后库文件路径混乱致编译卡壳.
```
TARGET_TRIPLE=x86_64-w64-mingw32 && \
PATH=/build/ml/vlc-avs2-avs3/extras/tools/build/bin:$PATH && \
cd contrib && mkdir win64 && cd win64 && \
../bootstrap --host=$TARGET_TRIPLE --disable-skins2 \
--disable-lua --disable-protobuf --disable-gettext --disable-libplacebo && \
make -j`nproc`
```
make -j`nproc`或需重复多次,直到全部成功编译.
结果放于I:\temp\build\ml\vlc-avs2-avs3\contrib\x86_64-w64-mingw32
八 ffmpeg启用AVS3解码器
(获取源码及补丁:https://gitee.com/zhengtianbo/vlc-avs2-avs3)
目前编译支持库时自动下载1e35519fe0b8bbad84641e83d49138152720b544版ffmpeg, 需增AVS3解码器:
(1) 用ffmpeg增改文件patch_1e35519fe0b8bbad84641e83d49138152720b544.zip中文件覆盖/build/ml/vlc-avs2-avs3/contrib/win64/ffmpeg.
此步可在Docker外操作, 本机目录I:\temp\build\ml\vlc-avs2-avs3\contrib\win64\ffmpeg. 若VLC所用版本变化, 可参考patch_1e35519fe0b8bbad84641e83d49138152720b544.zip自行修改ffmpeg.
(2) 删除文件"I:\temp\build\ml\vlc-avs2-avs3\contrib\win64\.ffmpeg" (不是ffmpeg目录!)以触发重配置.
(3) 重编译ffmpeg.
```
TARGET_TRIPLE=x86_64-w64-mingw32 && \
PATH=/build/ml/vlc-avs2-avs3/extras/tools/build/bin:$PATH && \
cd /build/ml/vlc-avs2-avs3/contrib/win64 && \
make -j`nproc`
```
七 编译VLC.
```
cd /build/ml/vlc-avs2-avs3 && ./bootstrap && mkdir build && cd build && \
../configure --host=$TARGET_TRIPLE \
--disable-lua --disable-skins2 --enable-avs2 \
--prefix=/prefix && \
make -j`nproc`
```
结果在I:\temp\build\ml\vlc-avs2-avs3\build\modules\.libs及I:\temp\build\ml\vlc-avs2-avs3\build\src\.libs
和I:\temp\build\ml\vlc-avs2-avs3\build\bin\.libs与I:\temp\build\ml\vlc-avs2-avs3\build\lib\.libs.
八 组合完整VLC及打包
```
make package-win32-release
```
最终结果在i:\build\ml\vlc-avs2-avs3\build\vlc-4.0.0-dev, 若顺利还有I:\temp\build\ml\vlc-avs2-avs3\build\vlc-4.0.0-dev-win64-release.7z.
结论: 使用videolan的Docker映像成功率高. 本文参考途径可优化, 即将davs2及uavs3d编译合并到VLC中, 减少手工操作.
手尾: 未支持AVS+. 欢迎提供可用源码.