Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

android下,avcodec_open2调用失败 #54

Open
HelloTodayWolrd opened this issue Feb 15, 2022 · 6 comments
Open

android下,avcodec_open2调用失败 #54

HelloTodayWolrd opened this issue Feb 15, 2022 · 6 comments

Comments

@HelloTodayWolrd
Copy link

为了能够让播放器实现硬解,重新编译了ffmpeg(加入了编译选项:--enable-hwaccel=h264_mediacodec),decoder = avcodec_find_decoder_by_name("h264_mediacodec");这一句后,获取的decoder 不为空,但是执行到avcodec_open2(player->vcodec_context, decoder, NULL),返回值小于0,执行失败,用av_strerror函数输出错误:Generic error in an external library。运行环境:华为鸿蒙OS平板。

@rockcarry
Copy link
Owner

ffmpeg 用的什么版本?
用仓库中编译好的 jni 测试过没,硬件解码是否正常?

@HelloTodayWolrd
Copy link
Author

ffmpeg是用你的仓库下的 版本。仓库中编译好的libfanplayer_jni.so的硬解可以正常运行。为了方便调试,我把你的这个工程转成了cmake的Android工程。

@HelloTodayWolrd
Copy link
Author

CMakeLists.txt文件如下:

@HelloTodayWolrd
Copy link
Author

cmake_minimum_required(VERSION 3.10.2)

# Declares and names the project.

project("fanplayer")
  
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++11")

#add ffmpeg lib
include_directories(ffmpeg/include)
#link_directories("ffmpeg/lib")
#add soundtouch lib
include_directories(soundtouch/include)
link_directories("soundtouch/lib")
#add openssl lib
include_directories(openssl/include)
link_directories("openssl/lib")

#add src
aux_source_directory(./ SRC_DIR)
aux_source_directory(./ffplayer SRC_DIR_FFPLAYER)

add_library( # Sets the name of the library.
        native-lib

        # Sets the library as a shared library.
        SHARED

        # Provides a relative path to your source file(s).
        #native-lib.cpp
        ${SRC_DIR}
        ${SRC_DIR_FFPLAYER}
        )
 
find_library( # Sets the name of the path variable.
        log-lib

        # Specifies the name of the NDK library that
        # you want CMake to locate.
        log)

 
set(distribution_DIR ${CMAKE_SOURCE_DIR}/ffmpeg/solib)
add_library(avutil-55
        SHARED
        IMPORTED)
set_target_properties(avutil-55
        PROPERTIES IMPORTED_LOCATION
        ${CMAKE_SOURCE_DIR}/ffmpeg/solib/libavutil.so)

add_library(swresample-2
        SHARED
        IMPORTED)
set_target_properties(swresample-2
        PROPERTIES IMPORTED_LOCATION
        ${CMAKE_SOURCE_DIR}/ffmpeg/solib/libswresample.so)
add_library(avcodec-57
        SHARED
        IMPORTED)
set_target_properties(avcodec-57
        PROPERTIES IMPORTED_LOCATION
        ${CMAKE_SOURCE_DIR}/ffmpeg/solib/libavcodec.so)
add_library(avfilter-6
        SHARED
        IMPORTED)
set_target_properties(avfilter-6
        PROPERTIES IMPORTED_LOCATION
        ${CMAKE_SOURCE_DIR}/ffmpeg/solib/libavfilter.so)
add_library(swscale-4
        SHARED
        IMPORTED)
set_target_properties(swscale-4
        PROPERTIES IMPORTED_LOCATION
        ${CMAKE_SOURCE_DIR}/ffmpeg/solib/libswscale.so)
add_library(avdevice-57
        SHARED
        IMPORTED)
set_target_properties(avdevice-57
        PROPERTIES IMPORTED_LOCATION
        ${CMAKE_SOURCE_DIR}/ffmpeg/solib/libavdevice.so)
add_library(avformat-57
        SHARED
        IMPORTED)
set_target_properties(avformat-57
        PROPERTIES IMPORTED_LOCATION
        ${CMAKE_SOURCE_DIR}/ffmpeg/solib/libavformat.so)
 
target_link_libraries( # Specifies the target library.
        fanplayer-lib

        #android lib
        android.so
        z

        # ffmepg lib
        swresample-2
        avcodec-57
        avfilter-6
        swscale-4
        avdevice-57
        avformat-57
        avutil-55
        # Links the target library to the log library
        # included in the NDK.
        ${log-lib})
```

@HelloTodayWolrd
Copy link
Author

我这个新的工程可以播放,但是只能软解,不知道为啥

@rockcarry
Copy link
Owner

ffmpeg 的版本要注意,android 要支持硬件解码只能用 n3.3.x 这个分支。n4.x.x 的 ffmpeg 对 mediacodec 硬件的支持是有问题的。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants