kotlin在已有项目中添加C++且使用FFmpeg播放rtsp

第一部分:已有的项目中添加C++

本文主要介绍:在没有集成C++的项目中添加C++,步骤如下:

一、添加资源文件

1、Android视图中app上点右键, 选择 new->Folder->JNI Folder

在出现的对话框change folder lacation中打钩,jni改成cpp:src/main/cpp/
2、在cpp目录上点右键, 选择new ->C/C++ Source File, 输入名字(例如native-lib.cpp)后, 然后在native-lib.cpp输入cpp内容, 例如如下(返回字符串的方法):

#include <jni.h>
#include <string>

extern "C" JNIEXPORT jstring JNICALL
Java_com_lihua_eifles_rtsp_1play_1base_MainActivity_stringFromJNI(//这里的名字要严格按照:Java_包名_方法名,1表示_
        JNIEnv *env,
        jobject thiz) {
    std::string hello = "Hello from C++";
    return env->NewStringUTF(hello.c_str());

}

3、在目录名cpp上点右键, New->File, 文件名为 CMakeLists.txt, 输入:

cmake_minimum_required(VERSION 3.4.1)
add_library( # 设置库的名称。
        native-lib
        # 将库设置为共享库
        SHARED
        # 提供源文件的相对路径
        native-lib.cpp)
        #如果CMakeLists.txt文件放在app文件夹下面的话,就需要改成下面的
		#src/main/cpp/native-lib.cpp)
find_library( # 设置PATH变量的名称.
        log-lib
        # 指定希望CMake查找的NDK库的名称
        log)
target_link_libraries( # 指定目标库
        native-lib
        # 将目标库链接到NDK中包含的日志库。
        ${log-lib})

4、在app上右键, 选择 Link C++ Project with Gradle, 在弹出的对话框中, 选择刚编辑的CMakeLists.txt文件

二、在activity里调用C++的函数

init {
        System.loadLibrary("native-lib")
    }
external fun stringFromJNI(): String?//载入C++里面的方法,不能少

添加的位置如下:
在这里插入图片描述
至此就可以调用C++里面的方法了。

第二部分:使用FFmpeg播放rtsp

有可用的demo,移到自己项目的步骤:

1、新建一个兼容C++的项目
2、cpp里面的CMakeList.txt移动到app文件夹,
path “src/main/cpp/CMakeLists.txt”
改成
path “CMakeLists.txt”
在这里插入图片描述
3、复制能用的CMakeLists.txt到自己的CMakeLists.txt
4、拷贝include到自己项目的cpp
5、拷贝jinLibs里面的文件到自己的项目
6、native-lib.cpp里面的内容复制到自己的项目
(记得修改这里的路径和自己的项目对应:Java_com_example_ffmpeg1_common_FFmpegNativeUtil_videoStreamPlay

7、Buidle.gradle里面添加
ndk{
abiFilters “armeabi-v7a”
}
在这里插入图片描述

这里有两个demo,运行截图和下载链接为:
在这里插入图片描述
demo的地址:https://download.csdn.net/download/wy313622821/12507933

在这里插入图片描述

demo的地址:https://download.csdn.net/download/wy313622821/12507946

第三部分低延时播放rtsp(移植记录)

1、移动Live项目到自己项目的根目录下
2、Setting.gradle添加 ,’:Live’
3、Buidle.gradle添加 implementation project(’:Live’)
4、修改:
compileSdkVersion = 28
buildToolsVersion = ‘28.0.2’
minSdkVersion = 21
targetSdkVersion = 28
versionCode = 102000
versionName = “1.2.0”

appcompatVersion=1.1.0
recyclerviewVersion=1.1.0-rc01
preferenceVersion=1.1.0
annotationVersion=1.1.0
ottoVersion=1.3.8
ijkVersion=0.8.8
5、移动onlive的代码到自己项目,包括代码和xml
6、在Buidle.gradle添加
implementation “androidx.appcompat:appcompat:1.1.0”
implementation “androidx.preference:preference:1.1.0”
implementation “androidx.annotation:annotation:1.1.0”

扫描二维码关注公众号,回复: 11639916 查看本文章

implementation “com.squareup:otto:1.3.8”
implementation “tv.danmaku.ijk.media:ijkplayer-java:0.8.8”
implementation “tv.danmaku.ijk.media:ijkplayer-exo:0.8.8”

7、在string.xml中添加:

<string name="N_A">N/A</string>
<string name="VideoView_render_none">Render: None</string>
<string name="VideoView_render_surface_view">Render: SurfaceView</string>
<string name="VideoView_render_texture_view">Render: TextureView</string>

<string name="VideoView_player_AndroidMediaPlayer">Player: AndroidMediaPlayer</string>
<string name="VideoView_player_IjkMediaPlayer">Player: IjkMediaPlayer</string>
<string name="VideoView_player_IjkExoMediaPlayer">Player: IjkExoMediaPlayer</string>

<string name="mi_player">Player</string>
<string name="mi_media">Media</string>
<string name="mi_resolution">Resolution</string>
<string name="mi_length">Length</string>
<string name="mi_stream_fmt1">Stream #%d</string>
<string name="mi_type">Type</string>
<string name="mi_language">Language</string>
<string name="mi_codec">Codec</string>
<string name="mi_profile_level">Profile level</string>
<string name="mi_pixel_format">Pixel format</string>
<string name="mi_frame_rate">Frame rate</string>
<string name="mi_bit_rate">Bit rate</string>
<string name="mi_sample_rate">Sample rate</string>
<string name="mi_channels">Channels</string>
<string name="mi__selected_video_track">*</string>
<string name="mi__selected_audio_track">*</string>
<string name="mi__selected_subtitle_track">*</string>
<string name="media_information">Media Information</string>
<string name="close">Close</string>

<string name="TrackType_video">Video</string>
<string name="TrackType_audio">Audio</string>
<string name="TrackType_subtitle">Subtitle</string>
<string name="TrackType_timedtext">Timed text</string>
<string name="TrackType_metadata">Meta data</string>
<string name="TrackType_unknown">Unknown</string>

<string name="VideoView_error_text_invalid_progressive_playback">Invalid progressive playback</string>
<string name="VideoView_error_text_unknown">Unknown</string>
<string name="VideoView_error_button">OK</string>


<!--    ********************************-->
<string name="pref_key_player">pref.player</string>
<string name="pref_key_using_media_codec">pref.using_media_codec</string>
<string name="pref_key_using_media_codec_auto_rotate">pref.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_key_pixel_format">pref.pixel_format</string>
<string name="pref_key_using_opensl_es">pref.using_opensl_es</string>
<string name="pref_key_enable_no_view">pref.enable_no_view</string>
<string name="pref_key_enable_surface_view">pref.enable_surface_view</string>
<string name="pref_key_enable_texture_view">pref.enable_texture_view</string>
<string name="pref_key_enable_detached_surface_texture">pref.enable_detached_surface_texture</string>
<string name="pref_key_using_mediadatasource">pref.using_mediadatasource</string>
<string name="pref_key_last_directory"></string>

<string name="vdec">vdec</string>
<string name="fps">fps</string>
<string name="v_cache">v-cache</string>
<string name="a_cache">a-cache</string>
<string name="load_cost">load-cost</string>
<string name="seek_cost">seek_cost</string>
<string name="seek_load_cost">seek_load_cost</string>
<string name="tcp_speed">tcp_speed</string>
<string name="bit_rate">bit_rate</string>

<string name="VideoView_ar_aspect_fit_parent">Aspect / Fit parent</string>
<string name="VideoView_ar_aspect_fill_parent">Aspect / Fill parent</string>
<string name="VideoView_ar_aspect_wrap_content">Aspect / Wrap content</string>
<string name="VideoView_ar_match_parent">Free / Fill parent</string>
<string name="VideoView_ar_16_9_fit_parent">16:9 / Fit parent</string>
<string name="VideoView_ar_4_3_fit_parent">4:3 / Fit parent</string>

最后,demo地址:
最原始的demo:https://download.csdn.net/download/wy313622821/12513058
修改封装后的demo:https://download.csdn.net/download/wy313622821/12513307

猜你喜欢

转载自blog.csdn.net/wy313622821/article/details/106436600