Ant-Media-Server
Ant-Media-Server copied to clipboard
Filter plugin does not work without audio
Getting 500 error when using the plugin filter without audio on the input stream:
`Access-Control-Allow-Origin: * Content-Type: text/html;charset=utf-8 Content-Language: en Content-Length: 4853 Date: Sat, 25 Jun 2022 03:59:13 GMT Connection: close
HTTP Status 500 – Internal Server Error
Type Exception Report
Message java.lang.NullPointerException
Description The server encountered an unexpected condition that prevented it from fulfilling the request.
Exception
javax.servlet.ServletException: java.lang.NullPointerExceptionorg.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:410) org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:346) org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:366) org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:319) org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:205) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) org.apache.catalina.filters.ExpiresFilter.doFilter(ExpiresFilter.java:1230) io.antmedia.filter.IPFilter.doFilter(IPFilter.java:24) io.antmedia.filter.JWTFilter.doFilter(JWTFilter.java:44) org.apache.catalina.filters.CorsFilter.handleNonCORS(CorsFilter.java:368) org.apache.catalina.filters.CorsFilter.doFilter(CorsFilter.java:174)
Root Cause
java.lang.NullPointerException io.antmedia.filter.FilterAdaptor.update(FilterAdaptor.java:193) io.antmedia.filter.FilterAdaptor.createFilter(FilterAdaptor.java:347) io.antmedia.plugin.FiltersManager.createFilter(FiltersManager.java:34) io.antmedia.rest.FilterRestService.create(FilterRestService.java:49) java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) java.base/java.lang.reflect.Method.invoke(Method.java:566) org.glassfish.jersey.server.model.internal.ResourceMethodInvocationHandlerFactory.lambda$static$0(ResourceMethodInvocationHandlerFactory.java:52) org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher$1.run(AbstractJavaResourceMethodDispatcher.java:124) org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.invoke(AbstractJavaResourceMethodDispatcher.java:167) org.glassfish.jersey.server.model.internal.JavaResourceMethodDispatcherProvider$TypeOutInvoker.doDispatch(JavaResourceMethodDispatcherProvider.java:219) org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.dispatch(AbstractJavaResourceMethodDispatcher.java:79) org.glassfish.jersey.server.model.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:469) org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:391) org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:80) org.glassfish.jersey.server.ServerRuntime$1.run(ServerRuntime.java:253) org.glassfish.jersey.internal.Errors$1.call(Errors.java:248) org.glassfish.jersey.internal.Errors$1.call(Errors.java:244) org.glassfish.jersey.internal.Errors.process(Errors.java:292) org.glassfish.jersey.internal.Errors.process(Errors.java:274) org.glassfish.jersey.internal.Errors.process(Errors.java:244) org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:265) org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:232) org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:680) 100 5085 100 4853 100 232 45355 2168 --:--:-- --:--:-- --:--:-- 47971ey.servlet.WebComponent.serviceImpl(WebComponent.java:394) org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:346) org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:366) org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:319) org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:205) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) org.apache.catalina.filters.ExpiresFilter.doFilter(ExpiresFilter.java:1230) io.antmedia.filter.IPFilter.doFilter(IPFilter.java:24) io.antmedia.filter.JWTFilter.doFilter(JWTFilter.java:44) org.apache.catalina.filters.CorsFilter.handleNonCORS(CorsFilter.java:368) org.apache.catalina.filters.CorsFilter.doFilter(CorsFilter.java:174)
Note The full stack trace of the root cause is available in the server logs.
Apache Tomcat/8.5.78
`Steps to reproduce:
- start a broadcasting without audio. In this example is the "123" stream id.
- curl to post filter
curl -i -X POST -H "Accept: Application/json" -H "Content-Type: application/json" "https://<server>:5443/<app>/rest/v2/filters/create" -d '{"filterId":"demo","inputStreams":["123"],"outputStreams":["output"],"videoFilter":"[in0]v360=fisheye:e:ih_fov=180:iv_fov=180:pitch=90[out0]","audioFilter":"[in0]acopy[out0]","videoEnabled":"true","audioEnabled":"false","type":"asynchronous"}'
It should be able to not use the "audioFilter" if the stream doesn't have audio. Or insert some dummy audio.