VLCKit编译(IOS)
一、下载
1.从官网下载VLCKit
,下载命令git clone http://code.videolan.org/videolan/VLCKit.git
;
2.VLCKit
代码下载完成后,还需要下载vlc
代码,下载地址可以从buildMobileVLCKit.sh
中获取,新建libvlc
目录,并进入libvlc
中,使用命令git clone https://git.videolan.org/git/vlc/vlc-3.0.git vlc
下载vlc
代码。
二、修改编译脚本
将编译脚本buildMobileVLCKit.sh
中关于下载vlc
部分的代码注释,避免每次都下载(若不注释,在git rebase
的时候会报错),修改的代码如下:
#if [ "$NONETWORK" != "yes" ]; then
# if ! [ -e vlc ]; then
# git clone https://git.videolan.org/git/vlc/vlc-3.0.git vlc
# info "Applying patches to vlc.git"
# cd vlc
# git checkout -B localBranch ${TESTEDHASH}
# git branch --set-upstream-to=origin/master localBranch
# git am ${ROOT_DIR}/Resources/MobileVLCKit/patches/*.patch
# if [ $? -ne 0 ]; then
# git am --abort
# info "Applying the patches failed, aborting git-am"
# exit 1
# fi
# cd ..
# else
# cd vlc
# git pull --rebase
# git reset --hard ${TESTEDHASH}
# git am ${ROOT_DIR}/Resources/MobileVLCKit/patches/*.patch
# cd ..
# fi
#fi
三、选取需要编译的版本
在通过命令git tag|tail
查看最新的稳定版本,选择一个版本,用命令git checkout tag name -b tagname
获取需要的版本并建立开发分支,用git branch
与git log
查看创建的分支是否正确。
注:编译master版本时,不需要修改vlc
与VLCKit
代码,下载完就可以直接编译,此博不详细说明。
3.1 VLCKit
版本选择
1.git tag | tail
查看所有的tag
信息:
~/workspace/VLCKit3/VLCKit$ git tag|tail
2.2.2
2.2.2-pre1
2.2.2-pre2
2.2.2-pre3
2.2.2-pre4
2.2.2-pre5
3.0.0-pre1
3.0.0-pre2
3.0.0-pre3
3.0.0-rc1
2.选择VLCKit 3.0.0-rc1
作为基础版本:
~/workspace/VLCKit3/VLCKit$ git checkout 3.0.0-rc1 -b tag300rc1
Switched to a new branch 'tag300rc1'
~/workspace/VLCKit3/VLCKit$ git branch
master
* tag300rc1 #*表示选择的版本
3.git log
显示是tag:3.0.0-rc1
版本:
3.2 vlc
版本选择
同样的,我们也需要对vlc
选取开发的基础版本,我们选择3.0.0-git
的版本作为基础版本,如下:
1.查看所有的tag
~/workspace/VLCKit3/VLCKit/libvlc/vlc$ git tag | tail
2.2.0-git
3.0.0-git
3.0.0-rc1
3.0.0-rc2
3.0.0-rc3
3.0.0-rc4
3.0.0-rc5
3.0.0-rc6
3.0.0-rc7
svn-trunk
2.选择3.0.0-git
版本作为基础版本:
~/workspace/VLCKit3/VLCKit/libvlc/vlc$ git checkout 3.0.0-git -b tag300
Switched to a new branch 'tag300'
~/workspace/VLCKit3/VLCKit/libvlc/vlc$ git branch
master
* tag300 #*表示选择的版本
3.git log
显示是3.0.0-git
版本:
4.tag: 3.0.0
版本说明:在3.0.0-git
后续的版本(3.0.0-r1,3.0.0-r2……3.0.0-r7
)中,添加了WeatherWax
这玩意儿,并修复了一些bug。编译的方法与3.0.0-git
一样。
3.0.0-git
object 8d432b090e08f141ce9156dc728afbed4636301b commit
author Jean-Baptiste Kempf <jb@videolan.org>
Thu, 30 Nov 2017 08:44:12 +0800 (01:44 +0100)
VLC media player 3.0.0-git
Splitting the repository of VLC 3.0.x and VLC.git master
3.0.0-rc7
object d427a9f90fb866ffd045961c62caabd597badb2a commit
author Jean-Baptiste Kempf <jb@videolan.org>
Sat, 20 Jan 2018 02:04:13 +0800 (19:04 +0100)
VLC media player 3.0.0 'WeatherWax' Release Candidate 7
This is the seventh release candidate of VLC 3.0, named "WeatherWax"
WeatherWax is a major release changing a lot in the media engine of VLC.
Notably, it:
- activates hardware decoding on all platforms, of H.264 & H.265, 8 & 10bits,
allowing 4K60 or even 8K decoding with little CPU consumption;
- merges all the code from the mobile ports into the same release,
- supports 360 video and 3D audio, and prepares for VR content,
- supports direct HDR and HDR tone-mapping,
- updates the audio passthrough for HD Audio codecs,
- allows browsing of local network drives like SMB, FTP, SFTP, NFS...
- stores the passwords securely
- brings a new subtitle rendering engine, supporting ComplexTextLayout
and font fallback
- supports ChromeCast with the new renderer framework,
- adds support for numerous new formats and codecs, including WebVTT,
AV1, TTML, HQX, 708 and Cineform,
- improves Bluray support with Java menus,
- updates the macOS interface with major cleaning,
- support HiDPI UI on Windows,
- prepares the experimental support for Wayland on Linux, and switches to OpenGL by default.
And so many other things...
四、编译
注意:编译之前,确保已经修改好了buildMobileVLCKit.sh
脚本
使用命令./buildMobileVLCKit.sh -f
编译支持iphonesimulator
与iphoneos
的MobileVLCKit.framework
,可能会遇到错误,若遇到错误,而又不知道错误在何处时,可以使用命令./buildMobileVLCKit.sh -f -v
,将会打印出编译的详细信息。
第一次编译的时候比较长,需要下载libtools
工具集,当libtools
工具集下载完后,以后的编译,就可以不下载,使用./buildMobileVLCKit.sh -f
进行编译。
编译过程中遇到错误时,需要修改一些文件才能编译得过,每次修改后,都需要重新编译。
1.在libvlc/vlc//contrib/iPhoneOS-armv7/gcrypt/cipher/Makefile.am
文件开始的位置添加LIBTOOL=@LIBTOOL@ --tag=CC
,保存后,进入目录libvlc/vlc//contrib/iPhoneOS-armv7/gcrypt/cipher/
运行make distclean
命令,删除Makefile
文件;
2.在libvlc/vlc//include/vlc_fixups.h:53
行后,添加一个thread_local
的宏定义: # define thread_local
;
3.在libvlc/vlc//modules/arm_neon/Makefile.am
文件开始的位置添加LIBTOOL=@LIBTOOL@ --tag=CC
,保存后,进入目录libvlc/vlc//modules/arm_neon/
运行make distclean
命令,删除Makefile
文件;
4.在libvlc/vlc//contrib/iPhoneOS-armv7s/gcrypt/cipher/Makefile.am
文件开始的位置添加LIBTOOL=@LIBTOOL@ --tag=CC
,保存后,进入目录保存后,并进入目录libvlc/vlc//contrib/iPhoneOS-armv7s/gcrypt/cipher/
运行make distclean
命令,删除Makefile
文件;
到此,就能将vlc
编译通过了。但是vlc
由于接口与VLCKit
不兼容,导致VLCKit
还是不能编译通过,需要修改一些文件才行。当vlc
编译完成之后,就可以使用 ./buildMobileVLCKit.sh -f -l
来编译,此时将跳过vlc
的编译,减少时间。
5.Sources/VLCMedia.m
修改内容:
--- a/Sources/VLCMedia.m
+++ b/Sources/VLCMedia.m
@@ -406,10 +406,11 @@ - (int)storeCookie:(NSString * _Nonnull)cookie
return -1;
}
#if TARGET_OS_IPHONE
- return libvlc_media_cookie_jar_store(p_md,
- [cookie UTF8String],
- [host UTF8String],
- [path UTF8String]);
+ return 0;
+ //libvlc_media_cookie_jar_store(p_md,
+// [cookie UTF8String],
+// [host UTF8String],
+// [path UTF8String]);
#else
return -1;
#endif
@@ -422,7 +423,7 @@ - (void)clearStoredCookies
}
#if TARGET_OS_IPHONE
- libvlc_media_cookie_jar_clear(p_md);
+ //libvlc_media_cookie_jar_clear(p_md);
#endif
}
6.Sources/VLCMediaListPlayer.m
修改:
--- a/Sources/VLCMediaListPlayer.m
+++ b/Sources/VLCMediaListPlayer.m
@@ -150,7 +150,7 @@ - (void)pause
[self performSelectorInBackground:@selector(pause) withObject:nil];
return;
}
- libvlc_media_list_player_set_pause(instance, 1);
+ libvlc_media_list_player_pause(instance);
}
历经重重劫难,付出几个晚上的努力,终于将MobileVLCKit.framework
编译成功了。
五、踩过的坑
1.未修改buildMobileVLCKit.sh
,直接使用,重复的下载代码,导致编译时间增长很多;
2.修改了libvlc/vlc//contrib/iPhoneOS-armv7/gcrypt/cipher/Makefile.am
后,没有执行make distclean
,导致第二次编译不过,需要重新再编译一次;
3.检查编译失败的时候,由于刚开始不知道使用-v
参数可以打印出更多的信息,上网查看好久,也未能解决,便将buildMobileVLCKit.sh
好好阅读,发现可以通过指定-v
参数打印详细信息;
4.编译好vlc
后,不知道使用-l
跳过,导致每次都重新编译vlc
,浪费了很多时间。
六、参考资料
参考1:iOS编译MobileVLCKit客户端 https://www.jianshu.com/p/9e3cdec84884
参考2:官网 https://code.videolan.org/videolan/VLCKit/issues
参考3:基于iOS5.0的MobileVLC(vlc for iOS)编译 http://www.cnblogs.com/madongchunqiu/archive/2012/06/07/Compile-MobileVLC-in-iOS5.html