本文介绍了GStreamer Android硬件加速H.264编码的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在开发一个机器人,它使用Gstreamer
从Jetson Nano
通过UDP
将两个摄像头流传输到Android设备。
此时,我正在获取其中一个流,并尝试对视频进行编码以在Android设备上显示。我的GStreamer管道如下所示:
rtspsrc location=rtsp://192.168.1.239:8554/test ! application/x-rtp, payload=96 ! rtph264depay ! amcviddec-omxexynosavcdec ! videoconvert ! autovideosink sync=false"
在手机上,我使用的是GStreamer的预构建二进制文件,其实现非常类似于this。
我从MediaCodecList
Android API中了解到,我的设备具有OMX.Exynos.avc.dec
的硬件加速,这就是我在该管道中使用它的原因。
现在,当我运行该应用程序时,本机库给我这个错误以及更多的";ame";type:
错误
2022-02-15 12:25:13.570 6377-6377/cz.walle.wallecontroller E/GStreamer+ahc: 0:00:00.095861231 0x7589b71200 ../sys/androidmedia/gst-android-hardware-camera.c:1777:_init_classes Failed to initialize android.hardware.Camera classes: Failed to get static field ID EFFECT_EMBOSS (Ljava/lang/String;): java.lang.NoSuchFieldError: no "Ljava/lang/String;" field "EFFECT_EMBOSS" in class "Landroid/hardware/Camera$Parameters;" or its superclasses
java.lang.NoSuchFieldError: no "Ljava/lang/String;" field "EFFECT_EMBOSS" in class "Landroid/hardware/Camera$Parameters;" or its superclasses
at org.freedesktop.gstreamer.GStreamer.nativeInit(Native Method)
at org.freedesktop.gstreamer.GStreamer.init(GStreamer.java:18)
at cz.walle.wallecontroller.ControlActivity.onCreate(ControlActivity.java:41)
at android.app.Activity.performCreate(Activity.java:8282)
at android.app.Activity.performCreate(Activity.java:8262)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1329)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:4005)
at android.app.ActivityThread.ha
2022-02-15 12:25:13.570 6377-6377/cz.walle.wallecontroller E/GStreamer+ahs: 0:00:00.096544154 0x7589b71200 ../sys/androidmedia/gst-android-hardware-sensor.c:596:_init_classes Failed to initialize Android classes: Failed to call Java method: java.lang.ClassNotFoundException: Didn't find class "org/freedesktop/gstreamer/androidmedia/GstAhsCallback" on path: DexPathList[[zip file "/data/app/~~cU9DGdEFi5D9pOGi5u1pLw==/cz.walle.wallecontroller-nq-kqx36s-N7ImViW2Lwrw==/base.apk"],nativeLibraryDirectories=[/data/app/~~cU9DGdEFi5D9pOGi5u1pLw==/cz.walle.wallecontroller-nq-kqx36s-N7ImViW2Lwrw==/lib/arm64, /data/app/~~cU9DGdEFi5D9pOGi5u1pLw==/cz.walle.wallecontroller-nq-kqx36s-N7ImViW2Lwrw==/base.apk!/lib/arm64-v8a, /system/lib64, /system/system_ext/lib64]]
java.lang.ClassNotFoundException: Didn't find class "org/freedesktop/gstreamer/androidmedia/GstAhsCallback" on path: DexPathList[[zip file "/data/app/~~cU9DGdEFi5D9pOGi5u1pLw==/cz.walle.wallecontroller-nq-kqx36s-N7ImViW2Lwrw==/base.apk"],nativeLibraryDirectories=[/data/app/~~cU9DGdEFi5D9pOGi5u1pLw==/cz.walle.wallecontroller-nq-kqx36s-N7ImVi
整个堆栈跟踪here。
有谁有这方面的经验吗?当我尝试使用avdec_h264
这样的不同编码器时,流可以工作,但有一个CPU内核跟不上编码。
推荐答案
您将使用解码库,它将根据插件中内置的排名来选择解码器。这应该选择可用于解码的最有效的:
rtspsrc location=rtsp://192.168.1.239:8554/test latency=300 ! application/x-rtp,encoding-name=H264 ! decodebin ! autovideosink
请注意,使用最低值可能无法获得最佳延迟。这取决于流格式和网络可用带宽。只需尝试在相当长的持续时间内运行各种值,然后查看。
这篇关于GStreamer Android硬件加速H.264编码的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。