记一次ijkplayer的编译过程

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/xiangzhihong8/article/details/80169571

从视频直播到播放器,现在很多的产品都集成了视频播放的功能,而目前市面上有比较主流的有第三方框架有:

不过本文并不是对这三个播放器进行介绍,而是简单的介绍如何在ubuntu和mac环境下编译ijkplayer。 ijkplayer框架的源码地址:
https://github.com/Bilibili/ijkplayer

Mac上编译ijkplayer

安装软件

在Mac上编译ijkplayer之前,需要先安装一些基本的软件,这些软件在其他的开发中也会用到,需要安装的软件有homebrew、git、yasm。

1,安装homebrew

打开Terminal,输入如下的命令:

  ruby -e "$(curl-fsSLhttps://raw.githubusercontent.com/Homebrew/install/master/install)"

2,安装git和 yasm

安装好homebrew后,再安装git和 yasm,安装的命令如下:

brew install git
brew install yasm

下载NDK并进行环境配置

NDK下载的官方地址为:
https://developer.android.google.cn/ndk/downloads/index.html
当然也可以到下面的地址下载(可以直接使用迅雷等P2P软件下载,建议下载r15版本):
https://blog.csdn.net/gyh198/article/details/75036686

然后,打开Terminal输入并输入如下的命令来打开环境变量,然后添加NDK的相关环境。

open -e .bash_profile

当然,也可以直接使用文本编辑器打开.bash_profile文件。
这里写图片描述
然后添加如下内容:

export PATH=$PATH:你的ndk路径
export ANDROID_NDK=你的ndk路径

这里写图片描述
然后 command+s 保存 ,最后检测是否配置ndk路径成功,在Terminal输入如下命令进行检测。

ndk-build

这里写图片描述

注意:当然,也可以使用Android-sdk里面的NDK,不过Android-sdk是最新版本,该文件所在结构如下:
这里写图片描述
配置完后,我们可以使用如下命令来检测NDK环境是否配置正确。

ndk-build -v

这里写图片描述

下载ijkplayer和编译ijkplayer

将ijkplayer框架源码clone到本地并编译,依次在终端输入如下命令。

git clonehttps://github.com/Bilibili/ijkplayer.git ijkplayer-android

cd ijkplayer-android

然后执行初始化,此时会从网上自动拉代码,主要是ijkplayer的一些基层类库,时间比较长。命令如下:

./init-android.sh

如果视频播放需要支持Https协议,还需要执行如下命令。

./init-android-openssl.sh

注意:若出现如下错误,说明是NDk的环境配置有问题。

Youmust define ANDROID_NDK, ANDROID_SDK before starting.They must point to yourNDK and SDK directories.

然后,编译各个平台的openssl。

cd android/contrib
./compile-openssl.sh clean
./compile-openssl.sh all

编译各个平台的ffmpeg,如果需要更多的编解码格式,需要先执行下面的命令。

cd ../..
cd config
rm module.sh
ln -s module-lite.sh module.sh
cd ..
cd android/contrib
./compile-ffmpeg.sh clean

说明:如果使用最新版本上如果执行的是(ln -s module-lite.sh module.sh),会出现如下错误:
这里写图片描述

然后,编译各个cpu架构的ffmpeg。命令如下:

 ./compile-ffmpeg.sh all

然后使用如下的命令编译ijkplayer即可。

cd ..
./compile-ijk.sh all

如果出现如下图所示的错误,请更换ndk的版本。
这里写图片描述

如果正确编译的话,会分别在ijkplayer-arm64、ijkplayer-armv5、ijkplayer-armv7a、ijkplayer-x86、ijkplayer-x86_64这些项目的src/main/libs/对应的名称 目录下分别生成libijkffmpeg.so、libijkplayer.so、libijksdl.so这三个so文件。

在ubuntu等Linux环境上编译ijkplayer,可以访问下面的地址:
https://blog.csdn.net/g241893312/article/details/79464162

展开阅读全文

一次内存溢出debug

12-10

源码如下rn[code=c]rnvoid GETFILEDLG::OnClickedButton1()rnrn // TODO: 在此添加控件通知处理程序代码rn CString str;rn BROWSEINFO bi;rn rn ZeroMemory(&bi, sizeof(BROWSEINFO));rnrn bi.hwndOwner = GetSafeHwnd();rn bi.lpszTitle = "将文件下载到";rnrn LPITEMIDLIST idl;rnrn idl = SHBrowseForFolder(&bi);rnrn if (idl == NULL)rn rn return;rn rn //ASSERTE( _CrtCheckMemory( ) );rn //char temp[MAX_PATH+1];rn SHGetPathFromIDList(idl, str.LockBuffer()); //溢出rn //SHGetPathFromIDList(idl, temp);rn //str = temp;rn GetDlgItem(IDC_EDIT_DIR)->SetWindowText(str.LockBuffer());rnrnrn CRemoteContrlDlg::SetPubDir(str);//bug:heap corruption detected rnrn[/code]rnrn主要功能为通过点击button->弹出浏览对话框,选择->获得选择项->转换为路径rn报错如下:rn[img=https://img-bbs.csdn.net/upload/201512/10/1449752241_665103.png][/img]rnrn经查询为内存溢出错误,使用断言ASSERTE( _CrtCheckMemory( ) );rn确定错误发生在SHGetPathFromIDList(idl, str.LockBuffer()); rnMSDN中对第二个参数的描述为rnPointer to a buffer to receive the file system path. This buffer must be at least MAX_PATH characters in sizern改正见源码注释rnrn说明:这段代码时间比较久了,其在vc6.0中并没有崩溃rnrn现有问题:rn1关于Cstring::LockBuffer我并没有在MSDN中找到说明,在CstringT中也一样rn2我猜测Cstring::LockBuffer返回实际值:str.lockbuffer()返回一个字符串指针,但是大小为0,所以赋值的时候会溢出,我的猜测对吗?rnrnrn新手一枚,欢迎讨论[img=https://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/003/monkey/27.gif][/img]rn 论坛

没有更多推荐了,返回首页