【发布时间】:2021-07-12 14:25:04
【问题描述】:
我设法为 armv8a api 27 使用了cross-compile ffmpeg using the NDK MediaCodec 硬件加速支持。
在设置权限、文件夹和正确设置LD_LIBRARY_PATH 等之后使用 root。我可以在终端会话 (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可见?
任何有助于Android 新手 站起来的信息将不胜感激。如果可能的话,我会在ffmpeg 代码上写一个小补丁。
我真的不想将它打包到一个应用程序中,只是为了能够测试它。
【问题讨论】:
-
我倾向于否,因为 Android 应用程序在 ART/Dalvik VM 中运行,因此不可能从 C 代码开始。任何与 NDK 相关的内容都存在于 Android 应用程序中。另请参阅:source.android.com/devices/media
标签: android ffmpeg android-ndk android-mediacodec dalvik