# 交叉编译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+. 欢迎提供可用源码.