ijkPLayer 0.8.8播放rtsp(android),编译出来的库需要在真机上调试吗?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ijkPLayer 0.8.8播放rtsp(android),编译出来的库需要在真机上调试吗?相关的知识,希望对你有一定的参考价值。

ijkPLayer 0.8.8播放rtsp, 根据网上的编译方式编译时添加了如下选项:
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-protocol=rtp"//修改
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-protocol=tcp"//添加
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-demuxer=rtsp"//添加
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-decoder=mjpeg"//添加
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-demuxer=mjpeg"//添加

但是编译出来的库一直在安卓模拟器上播放不了RTSP流,提示:
E/IJKMEDIA: rtsp://:@192.168.168.139/1: Protocol not found

我就问问,需要怎么编?还是需要在真机上调试?

编译环境是:

virtualbox下的ubuntu
jdk-8u112-linux-x64 .tar.gz
android-ndk-r13-linux-x86_64.zip
android-sdk_r24.4.1-linux.tgz

配置好这些后安装: install homebrew, git, yasm

搭建好环境后就可以编译了,开始我编译出了0.8.4版本,发现播放不了rtsp,播放就是黑屏,后来发现有人说新版本有这个问题,退回到旧版本就没有问题了,于是我使用了K0.7.6
参考技术A 我用真机调试也一样,但是我用同一个so,再另外找一个ijk的安卓工程又能正常播放,看来跟app的工程有关。

安卓直播详细教程-----ijkplayer集成及基本使用

好久没有写这个系列的文章了,时隔接近一年再次用到ijkplayer会发现已经跳跃了三个大版本,那么今天就先介绍一下jikplayer的集成和基本使用。

首先贴上GitHub地址:Bilibili/ijkplayer

其实呢github已经说的很清楚了,不过还是和大家分享一下:

准备工作:

在引入ijkplayer之前我们需要去构建.so,因为在后面我们需要用到,这里本人已经编译了一套可以直接拿去用,下载地址:
http://download.csdn.net/download/github_33304260/9932313

下面是具体生成流程:

第一步:安装homebrew, git, yasm

安装homebrew :
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

安装git :
brew install git

安装yasm:
brew install yasm

第二步:配置环境变量

export ANDROID_SDK=<your sdk path>
export ANDROID_NDK=<your ndk path>

第三步:根据自己的需求更改module.sh

以下提供了其他三种module.sh文件,如果不做修改就是默认类型。

1.If you prefer more codec/format

cd config
rm module.sh
ln -s module-default.sh module.sh
cd android/contrib

2.If you prefer less codec/format for smaller binary size (include hevc function)

cd config
rm module.sh
ln -s module-lite-hevc.sh module.sh
cd android/contrib

3.If you prefer less codec/format for smaller binary size (by default)

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

上面的配置都完成之后,我们开始构建我们的so文件。

构建.so文件

第一步 :下载工程

git clone https://github.com/Bilibili/ijkplayer.git ijkplayer-android

第二步:切换到相应版本的提交

cd ijkplayer-android
git checkout -B latest k0.8.1

第三步:执行init-android脚本

./init-android.sh

第四步:执行ffmpeg脚本

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


第五步:执行compile-ijk脚本

cd ..
./compile-ijk.sh all

此时我们需要的so文件已尽生成:
如下图:

构建安卓项目

第一步:在app下gradle添加如下代码:

android 
    sourceSets.main 
        jniLibs.srcDirs = ['libs']
    


dependencies 
    compile 'tv.danmaku.ijk.media:ijkplayer-java:0.8.1'
    compile 'tv.danmaku.ijk.media:ijkplayer-armv7a:0.8.1'
    compile 'tv.danmaku.ijk.media:ijkplayer-exo:0.8.1'

第二步:在project下gradle添加如下代码:

ext 
    compileSdkVersion = 23  // depending on your sdk version 
    buildToolsVersion = "23.0.3"  // depending on your build tools version

    targetSdkVersion = 23   // depending on your sdk version

    versionCode = 800102
    versionName = "0.8.1.2"


task clean(type: Delete) 
    delete rootProject.buildDir


wrapper 
    gradleVersion = '2.14.1'

第三步:
将如下资源从sample工程拷入自己工程

第四步:导包并整理资源
将引入的代码重新导入自己的包名!!!
同时将缺失的资源文件添加进工程

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <!-- -->
    <string name="pref_title_general">General</string>

    <string name="pref_key_enable_background_play">pref.enable_background_play</string>
    <string name="pref_title_enable_background_play">Enable background play</string>
    <string name="pref_summary_enable_background_play">need Android 4.0+</string>

    <string name="pref_key_using_android_player">pref.using_android_player</string>
    <string name="pref_title_using_android_player">Using system player</string>
    <string name="pref_summary_using_android_player"></string>

    <string name="pref_key_player">pref.player</string>
    <string name="pref_title_player">Choose Player</string>
    <string-array name="pref_entries_player">
        <item>Auto Select</item>
        <item>AndroidMediaPlayer</item>
        <item>IjkMediaPlayer</item>
        <item>IjkExoMediaPlayer</item>
    </string-array>
    <string-array name="pref_entry_values_player">
        <item>0</item>
        <item>1</item>
        <item>2</item>
        <item>3</item>
    </string-array>
    <string-array name="pref_entry_summaries_player">
        <item>Auto Select</item>
        <item>AndroidMediaPlayer</item>
        <item>IjkMediaPlayer</item>
        <item>IjkExoMediaPlayer</item>
    </string-array>

    <!-- -->
    <string name="pref_title_ijkplayer_video">Video: ijkplayer</string>

    <string name="pref_key_using_media_codec">pref.using_media_codec</string>
    <string name="pref_title_using_media_codec">Using MediaCodec</string>
    <string name="pref_summary_using_media_codec"></string>

    <string name="pref_key_using_media_codec_auto_rotate">pref.using_media_codec_auto_rotate</string>
    <string name="pref_title_using_media_codec_auto_rotate">Using MediaCodec auto rotate</string>
    <string name="pref_summary_using_media_codec_auto_rotate"></string>

    <string name="pref_key_media_codec_handle_resolution_change">pref.media_codec_handle_resolution_change</string>
    <string name="pref_title_media_codec_handle_resolution_change">MediaCodec handle resolution change</string>
    <string name="pref_summary_media_codec_handle_resolution_change"></string>

    <string name="pref_key_pixel_format">pref.pixel_format</string>
    <string name="pref_title_pixel_format">Pixel Format</string>
    <string-array name="pref_entries_pixel_format">
        <item>Auto Select</item>
        <item>RGB 565</item>
        <item>RGB 888</item>
        <item>RGBX 8888</item>
        <item>YV12</item>
        <item>OpenGL ES2</item>
    </string-array>
    <string-array name="pref_entry_values_pixel_format">
        <item></item>
        <item>fcc-rv16</item>
        <item>fcc-rv24</item>
        <item>fcc-rv32</item>
        <item>fcc-yv12</item>
        <item>fcc-_es2</item>
    </string-array>
    <string-array name="pref_entry_summaries_pixel_format">
        <item>Auto Select</item>
        <item>RGB 565</item>
        <item>RGB 888</item>
        <item>RGBX 8888</item>
        <item>YV12</item>
        <item>OpenGL ES2</item>
    </string-array>

    <!-- -->
    <string name="pref_title_ijkplayer_audio">Audio: ijkplayer</string>

    <string name="pref_key_using_opensl_es">pref.using_opensl_es</string>
    <string name="pref_title_using_opensl_es">Using OpenSL ES</string>
    <string name="pref_summary_using_opensl_es"></string>

    <!-- -->
    <string name="pref_title_render_view">RenderView</string>

    <string name="pref_key_enable_no_view">pref.enable_no_view</string>
    <string name="pref_title_enable_no_view">Enable NoView</string>
    <string name="pref_summary_enable_no_view"></string>

    <string name="pref_key_enable_surface_view">pref.enable_surface_view</string>
    <string name="pref_title_enable_surface_view">Enable SurfaceView</string>
    <string name="pref_summary_enable_surface_view"></string>

    <string name="pref_key_enable_texture_view">pref.enable_texture_view</string>
    <string name="pref_title_enable_texture_view">Enable TextureView</string>
    <string name="pref_summary_enable_texture_view"></string>

    <string name="pref_key_enable_detached_surface_texture">pref.enable_detached_surface_texture</string>
    <string name="pref_title_enable_detached_surface_texture">Enable detached SurfaceTexture</string>
    <string name="pref_summary_enable_detached_surface_texture"></string>

    <!-- -->
    <string name="pref_title_misc">Misc</string>
    <string name="pref_key_using_mediadatasource">pref.using_mediadatasource</string>
    <string name="pref_title_using_mediadatasource">Using MediaDataSource</string>
    <string name="pref_summary_using_mediadatasource"></string>

    <!-- -->
    <string name="pref_key_last_directory"></string>

</resources>

具体操作时根据报错提示添加。

第五步:播放器使用
完成上述步骤之后就可以开始使用了

 <ecarx.videomanuals.widget.media.IjkVideoView
        android:id="@+id/ijk_video_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="center" />

效果展示:

上图的播放控制器本人做了自定义修改,今天这篇文章先介绍的这里,下一篇会详细介绍播放器的详细使用和自定义功能。

项目GitHub地址:
https://github.com/libin7278/videomanuals
.so文件下载地址:
http://download.csdn.net/download/github_33304260/9932313

有问题的小伙伴可以扫码右侧二维码加入群聊,一起讨论,分享。

扫码关注公众号“伟大程序猿的诞生“,更多干货新鲜文章等着你~

公众号回复“资料获取”,获取更多干货哦~

有问题添加本人微信号“fenghuokeji996” 或扫描博客导航栏本人二维码

以上是关于ijkPLayer 0.8.8播放rtsp(android),编译出来的库需要在真机上调试吗?的主要内容,如果未能解决你的问题,请参考以下文章

ijkplayer 录像 截图功能,支持rtsp rtmp http 流媒体

ijkplayer 录像 截图功能,支持rtsp rtmp http 流媒体

Android GSYVideoPlayer视频播放器

Ijkplayer播放器源码分析之音视频输出——视频篇

IJKPlayer集成直播拉流播放

iOS多视频显示