说明
上个月,我下载当时最新版linphone,tag版本是3.2.5。不知道从哪个版本开始,linphone改了整体的编译方式。重新用python进行编译的方式和部分文件的生成。
这都不是问题,但是,在android5.0以前版本并不支持。从网络上搜索了好多答案,基本上都是说H264不开源,而我下的还是开发版本,所以并没有将libopenh264.so这个不开源的库打包进入。所以导致了,Android5.0以前的版本没有H264编码的问题。
解决方法
- ./prepare.py -ac 编译所有的文件。
- 从网络上下载libopenshh264.so库文件放到libs/文件夹下。
解决思路
这个要特别感谢QQ群:377532905中今何在的帮助,这个问题困扰了很久。以前的解决思路将在下篇中给出。
- 查看logcat输入日志,找到没有链接到lipopenh264.so库
- 查看java代码,知道缺失代码,需要下载so库的下载地址。
- 将下载下来的库解压,改名,放到libs文件夹下,即可显示H264编码,并且可用。
解决步骤
1. 打开Debug模式
打开linphone并勾选Debug模式,显示具体的log。
2. 查看logcat,找到问题点
其中有一个加载libmsopenh264.so的地方,其中要动态添加”libopenh264.so”文件。
3. 查看java代码,查找需要缺失的地方
在OpenH264DownloadHelper中,找到了如下代码
/**
* Default values
* nameLib = "libopenh264-1.5.so"
* urlDownload = "http://ciscobinary.openh264.org/libopenh264-1.5.0-android19.so.bz2"
* nameFileDownload = "libopenh264-1.5.0-android19.so.bz2"
*/
public OpenH264DownloadHelper(Context context) {
userData = new ArrayList<Object>();
licenseMessage = "OpenH264 Video Codec provided by Cisco Systems, Inc.";
nameLib = "libopenh264.so";
urlDownload = "http://ciscobinary.openh264.org/libopenh264-1.5.0-android19.so.bz2";
nameFileDownload = "libopenh264-1.5.0-android19.so.bz2";
if(context.getFilesDir() != null) {
fileDirection = context.getFilesDir().toString();
Log.i("[OpenH264Downloader] fileDirection =context.getFilesDir().toString() = " + fileDirection);
}
}
其中,“http://ciscobinary.openh264.org/libopenh264-1.5.0-android19.so.bz2“就是libopenh264.so代码, 下载下来,解压缩并改名就可以
4.下载so库,放入libs文件夹
放入libs文件夹中, 其中我的设备都是armv7, 放入这个libs下的armv7文件夹中就可以运行。由于没有x86的手机,并没有测试这个。不过我想,应该一样的, 因为链接地址是一样的。
5. 运行,并测试
通过H264编码进行视频通话。OK,成功!好兴奋a。
其中在解决问题之前,我进行了大量的代码排错工作。下篇粘出。