ant-media / Ant-Media-Server

Ant Media Server is a live streaming engine software that provides adaptive, ultra low latency streaming by using WebRTC technology with ~0.5 seconds latency. Ant Media Server is auto-scalable and it can run on-premise or on-cloud.
https://antmedia.io
Other
4.27k stars 628 forks source link

NullPointerException when uploading VoD #1850

Closed jeusdi closed 4 years ago

jeusdi commented 4 years ago

I'm trying to upload an video using this curl command:

curl --location --request POST 'http://localhost:5080/LiveApp/rest/v2/vods/create?name=jcabre-1.mp4' \
--header 'Content-Type: multipart/form-data' \
--form '0=@/home/jcabre/Downloads/hd0079.mp4'

However, I'm getting this message:

The server encountered an unexpected condition that prevented it from fulfilling the request.

The stacktrace is:

java.lang.NullPointerException
    org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:432)
    org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:370)
    org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:389)
    org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:342)
    org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:229)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    org.apache.catalina.filters.ExpiresFilter.doFilter(ExpiresFilter.java:1232)
    io.antmedia.filter.IPFilter.doFilter(IPFilter.java:32)
    org.red5.logging.LoggerContextFilter.doFilter(LoggerContextFilter.java:84)
    org.apache.catalina.filters.CorsFilter.handleNonCORS(CorsFilter.java:364)
    org.apache.catalina.filters.CorsFilter.doFilter(CorsFilter.java:170)

Root cause:

java.lang.NullPointerException
    io.antmedia.rest.RestServiceBase.uploadVoDFile(RestServiceBase.java:1051)
    io.antmedia.rest.VoDRestServiceV2.uploadVoDFile(VoDRestServiceV2.java:116)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    java.lang.reflect.Method.invoke(Method.java:498)
    org.glassfish.jersey.server.model.internal.ResourceMethodInvocationHandlerFactory.lambda$static$0(ResourceMethodInvocationHandlerFactory.java:76)
    org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher$1.run(AbstractJavaResourceMethodDispatcher.java:148)
    org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.invoke(AbstractJavaResourceMethodDispatcher.java:191)
    org.glassfish.jersey.server.model.internal.JavaResourceMethodDispatcherProvider$TypeOutInvoker.doDispatch(JavaResourceMethodDispatcherProvider.java:243)
    org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.dispatch(AbstractJavaResourceMethodDispatcher.java:103)
    org.glassfish.jersey.server.model.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:493)
    org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:415)
    org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:104)
    org.glassfish.jersey.server.ServerRuntime$1.run(ServerRuntime.java:277)
    org.glassfish.jersey.internal.Errors$1.call(Errors.java:272)
    org.glassfish.jersey.internal.Errors$1.call(Errors.java:268)
    org.glassfish.jersey.internal.Errors.process(Errors.java:316)
    org.glassfish.jersey.internal.Errors.process(Errors.java:298)
    org.glassfish.jersey.internal.Errors.process(Errors.java:268)
    org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:289)
    org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:256)
    org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:703)
    org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:416)
    org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:370)
    org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:389)
    org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:342)
    org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:229)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    org.apache.catalina.filters.ExpiresFilter.doFilter(ExpiresFilter.java:1232)
    io.antmedia.filter.IPFilter.doFilter(IPFilter.java:32)
    org.red5.logging.LoggerContextFilter.doFilter(LoggerContextFilter.java:84)
    org.apache.catalina.filters.CorsFilter.handleNonCORS(CorsFilter.java:364)
    org.apache.catalina.filters.CorsFilter.doFilter(CorsFilter.java:170)
cemalgultekin commented 4 years ago

just change

--form '0=@/home/jcabre/Downloads/hd0079.mp4'

to

 --form 'file=@/home/jcabre/Downloads/hd0079.mp4'

the actual required parameter is file. Antmedia rest service expects the fileStream with the name file, and if it doesn't receive anything with that paramter it throws an exception, as the rest api does not check if the parameter exists.

muratugureminoglu commented 4 years ago

It should be as follows.

curl --location --request POST 'http://localhost:5080/LiveApp/rest/v2/vods/create?name=jcabre-1.mp4' \
--header 'Content-Type: multipart/form-data' \
--form 'file=@/home/jcabre/Downloads/hd0079.mp4'

Reference: https://antmedia.io/rest/#/VoD%20Rest%20Service/uploadVoDFile