我设法 cross-compile ffmpeg
using the NDK对于带有 MediaCodec
的 armv8a api 27硬件加速支持。
设置权限、文件夹和正确设置后使用root LD_LIBRARY_PATH
等等。我可以在终端 session (ssh)上毫无问题地运行它。除非我不尝试使用 -hwaccel
选项。
如果尝试使用 -hwaccel
运行某些东西, 喜欢:
ffmpeg -rtsp_transport tcp -an -hwaccel mediacodec -c:v hevc_mediacodec -i rtsp://user:pass@192.168.0.100:554/onvif1 -f null - -benchmark
我收到关于 No Java virtual machine
的错误信息....
Input #0, rtsp, from 'rtsp://user:pass@192.168.0.100:554/onvif1':
Metadata:
title : H.265 Video, RtspServer_0.0.0.2
Duration: N/A, start: 0.000000, bitrate: N/A
Stream #0:0: Video: hevc (Main), yuv420p(tv, bt470bg), 1920x1080 [SAR 1:1 DAR 16:9], 10 fps, 10 tbr, 90k tbn, 10 tbc
Stream #0:1: Audio: pcm_alaw, 8000 Hz, mono, s16, 64 kb/s
[amediaformat @ 0x7e2ea27300] No Java virtual machine has been registered
[hevc_mediacodec @ 0x7e2eb44f00] Failed to create media format
Stream mapping:
Stream #0:0 -> #0:0 (hevc (hevc_mediacodec) -> wrapped_avframe (native))
Error while opening decoder for input stream #0:0 : Generic error in an external library
有没有可能开始 (创建还是启动?)直接从 C 代码中创建 Dalvik Java VM?我什至不知道这些是否是正确的术语。使其对 ffmpeg
可见?任何有助于 的信息安卓新手站起来将不胜感激。如果可能的话,我会在
ffmpeg
上写一个小补丁。代码。我真的不想把它打包到一个应用程序中,只是为了能够测试它。
最佳答案
如果您使用 AOSP 工具构建可执行文件,您可以 instantiate an AndroidRuntime
,这将为您提供 JVM,另请参阅 app_process命令。
为 AOSP 编译的常规方法是遵循 official instructions并将您的可执行文件添加到构建中。但是您可以尝试使用系统 header 并从您的设备(或模拟器)中提取要链接的共享库。
关于android - 从原生 C 代码 NDK 启动 Android Java VM(ffmpeg mediacodec 使用),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67144215/