Recherche avancée

Médias (91)

Autres articles (112)

  • Websites made ​​with MediaSPIP

    2 mai 2011, par

    This page lists some websites based on MediaSPIP.

  • Des sites réalisés avec MediaSPIP

    2 mai 2011, par

    Cette page présente quelques-uns des sites fonctionnant sous MediaSPIP.
    Vous pouvez bien entendu ajouter le votre grâce au formulaire en bas de page.

  • Creating farms of unique websites

    13 avril 2011, par

    MediaSPIP platforms can be installed as a farm, with a single "core" hosted on a dedicated server and used by multiple websites.
    This allows (among other things) : implementation costs to be shared between several different projects / individuals rapid deployment of multiple unique sites creation of groups of like-minded sites, making it possible to browse media in a more controlled and selective environment than the major "open" (...)

Sur d’autres sites (7939)

  • Is it possible to use something other than a circular buffer when using ffmpeg to pass RTSP video to a WebRTC client ?

    3 novembre 2024, par Doctico

    I have a Node application that uses ffmpeg to receive the RTSP stream of an ip camera (h264), and then pass send it using node-webrtc to a remote client. However, in my current implementation, ffmpeg only outputs 8192 byte chunks, which must be buffered in order to create the full frame that my current node-webrtc flow expects. This circular buffer results in a 1-2 second delay when the client is viewing the video. Is there any way to pass the stream through node-webrtc as the chunks come in, or at least extract complete frames so that circular buffering is not necessary ?

    


    So far, I have tried this, which works but has a 1-2 second delay, and even higher delay with higher resolution cameras :

    


        async startStream() {

        const rtspUrl = 'rtsp://my-rtsp-url';

        const videoSource = new wrtc.nonstandard.RTCVideoSource();
        const videoTrack = videoSource.createTrack();

        const width = 640;
        const height = 480;
        const frameSize = width * height * 1.5; // YUV420p format

        //circular buffer:
        let frameBuffer = Buffer.alloc(0);
        const frameStream = new Writable({
            write: (chunk, encoding, callback) => {
                frameBuffer = Buffer.concat([frameBuffer, chunk]);

                while (frameBuffer.length >= frameSize) {
                    const frame = frameBuffer.slice(0, frameSize);
                    frameBuffer = frameBuffer.slice(frameSize);

                    videoSource.onFrame({
                        width: width,
                        height: height,
                        data: new Uint8ClampedArray(frame)
                    });
                }
                callback();
            }
        });

        const ffmpegProcess = ffmpeg(rtspUrl)
            .inputOptions([
                `-fflags nobuffer`,
                `-flags low_delay`,
                `-rtsp_transport tcp`,
                `-strict experimental`,
                `-analyzeduration 0`,
                `-threads 0`,
                `-hwaccel auto`
            ])
            .outputOptions([
                `-f rawvideo`,
                `-c:v rawvideo`,
                '-b:v', streamId === 1 ? '2000k' : '1000k',
                '-bf', '0',
                `-s ${width}x${height}`,
                `-pix_fmt yuv420p`,
                `-tune zerolatency`
            ])
            .on('start', (cmd) => console.log('FFmpeg started:', cmd))
            .on('error', error => {
                console.error('FFmpeg error:', error);
                this.stopStream();
            })
            .on('end', () => {
                console.log('FFmpeg stream ended');
                this.stopStream();
            })

        ffmpegProcess
            .pipe(frameStream);

        return videoTrack;
    }


    


  • Alfresco Content transformation from .avi to *.flv using ffmpeg

    25 octobre 2011, par Masanchez

    I'm trying to transform diferents video formats into .flv in Alfresco
    I'm using 'ffmpeg' tool to transform content.
    My code :
    avi2flv-transform-context.xml

    <?xml version='1.0' encoding='UTF-8'?>

    <beans>
       <bean class="org.alfresco.repo.content.transform.RuntimeExecutableContentTransformerWorker">
           <property>
               <ref bean="mimetypeService"></ref>
           </property>
           <property>
               <bean class="org.alfresco.util.exec.RuntimeExec">
                   <property>
                       <map>
                           <entry key=".*">
                               <list>
                                   <value>ffmpeg</value>
                                   <value>-version</value>
                               </list>
                           </entry>
                       </map>
                   </property>
                   <property>
                       <value>1</value>
                   </property>
               </bean>
           </property>
           <property>
               <bean class="org.alfresco.util.exec.RuntimeExec">
                   <property>
                       <map>
                           <entry key="Linux">
                               <value>ffmpeg -i &#39;${target}&#39; ${flv.encoder.params} &#39;${source}&#39;</value>
                           </entry>
                       </map>
                   </property>
                   <property>
                       <value>1,2</value>
                   </property>
                   <property>
                       <value>true</value>
                   </property>
                   <property>
                       <props>
                           <prop key="flv.encoder.params">-vcodec flv</prop>
                       </props>
                   </property>
               </bean>
           </property>
           <property>
               <list>
    <bean class="org.alfresco.repo.content.transform.ExplictTransformationDetails">
                       <property>
                           <value>video/avi</value>
                       </property>
                       <property>
                           <value>video/x-flv</value>
                       </property>
                   </bean>
                   <bean class="org.alfresco.repo.content.transform.ExplictTransformationDetails">
                       <property>
                           <value>video/x-msvideo</value>
                       </property>
                       <property>
                           <value>video/x-flv</value>
                       </property>
                   </bean>
                   <bean class="org.alfresco.repo.content.transform.ExplictTransformationDetails">
                       <property>
                           <value>video/mpeg</value>
                       </property>
                       <property>
                           <value>video/x-flv</value>
                       </property>
                   </bean>
                   <bean class="org.alfresco.repo.content.transform.ExplictTransformationDetails">
                       <property>
                           <value>video/mp4</value>
                       </property>
                       <property>
                           <value>video/x-flv</value>
                       </property>
                   </bean>
                   <bean class="org.alfresco.repo.content.transform.ExplictTransformationDetails">
                       <property>
                           <value>video/mpeg2</value>
                       </property>
                       <property>
                           <value>video/x-flv</value>
                       </property>
                   </bean>
                   <bean class="org.alfresco.repo.content.transform.ExplictTransformationDetails">
                       <property>
                           <value>video/x-sgi-movie</value>
                       </property>
                       <property>
                           <value>video/x-flv</value>
                       </property>
                   </bean>
                   <bean class="org.alfresco.repo.content.transform.ExplictTransformationDetails">
                       <property>
                           <value>video/quicktime</value>
                       </property>
                       <property>
                           <value>video/x-flv</value>
                       </property>
                   </bean>
                   <bean class="org.alfresco.repo.content.transform.ExplictTransformationDetails">
                       <property>
                           <value>video/x-ms-asf</value>
                       </property>
                       <property>
                           <value>video/x-flv</value>
                       </property>
                   </bean>
                   <bean class="org.alfresco.repo.content.transform.ExplictTransformationDetails">
                       <property>
                           <value>video/x-ms-wmv</value>
                       </property>
                       <property>
                           <value>video/x-flv</value>
                       </property>
                   </bean>
                   <bean class="org.alfresco.repo.content.transform.ExplictTransformationDetails">
                       <property>
                           <value>video/x-rad-screenplay</value>
                       </property>
                       <property>
                           <value>video/x-flv</value>
                       </property>
                   </bean>
                   <bean class="org.alfresco.repo.content.transform.ExplictTransformationDetails">
                       <property>
                           <value>video/ogg</value>
                       </property>
                       <property>
                           <value>video/x-flv</value>
                       </property>
                   </bean>
               </list>
           </property>
       </bean>
       <bean class="org.alfresco.repo.content.transform.ProxyContentTransformer" parent="baseContentTransformer">
           <property>
               <ref bean="transformer.ffmpeg.avi.worker"></ref>
           </property>
       </bean>
    </beans>

    webservice :

    if(getFile(folderVIDEO, field.filename) == null)
    {
                               if(file_test_node=folderVIDEO.createFile(nombrefichero+field.filename)){
                                   model.mensajes.push(&#39;Se ha creado el fichero &#39;+nombrefichero+field.filename);
                               }else
                                   model.mensajes.push(&#39;Ha ocurrido un error cuando se intentaba crear el fichero &#39;+nombrefichero+field.filename);
                               file_test_node.properties.content.write(field.content);
                               folderVIDEO = getFolder(search.findNode("workspace://SpacesStore/"+fondoid),nameFolderVIDEO);
                               var action = actions.create("transform");
                               // Store the transformed version in the same folder as the source
                               action.parameters["destination-folder"] = file_test_node.parent;
                               action.parameters["assoc-type"] = "{http://www.alfresco.org/model/content/1.0}contains";
                               action.parameters["assoc-name"] = file_test_node.name + "transformed";
                               action.parameters["mime-type"] = "video/x-flv";
                               // Execute
                               action.execute(file_test_node);
                           }

    The error

    The Web Script /alfresco/s/gcd/fondo has responded with a status of 500 - Internal Error.

    500 Description:     An error inside the HTTP server which prevented it from fulfilling the request.

    Message:    09180016 Wrapped Exception (with status template): 09180029 Failed to execute script &#39;/com/inventiaplus/gcd/fondo/creado.post.js (in repository store workspace://SpacesStore/Company Home/Data Dictionary/Web Scripts Extensions)&#39;: 09180028 Content conversion failed: reader: ContentAccessor[ contentUrl=store://2011/10/18/20/56/65b3457f-c37c-4404-b4b7-9abac30f018d.bin, mimetype=video/x-msvideo, size=1614694, encoding=null, locale=es_ES] writer: ContentAccessor[ contentUrl=store://2011/10/18/20/56/e92d00e2-7bd8-4bdd-8d50-b61fe4bac903.bin, mimetype=video/x-flv, size=0, encoding=null, locale=es_ES] options: org.alfresco.service.cmr.repository.TransformationOptions@745ce55


    Exception:  org.alfresco.service.cmr.repository.ContentIOException - 09180027 Transformation failed - status indicates an error: Execution result: os: Linux command: [ffmpeg, -i, &#39;/home/inventiaplus/alfresco/tomcat/temp/Alfresco/RuntimeExecutableContentTransformerWorker_target_3008293789769608319.flv&#39;, -vcodec flv, &#39;/home/inventiaplus/alfresco/tomcat/temp/Alfresco/RuntimeExecutableContentTransformerWorker_source_5021918644492976031.avi&#39;] succeeded: false exit code: 1 out: err: FFmpeg version SVN-r0.5.1-4:0.5.1-1ubuntu1.2, Copyright (c) 2000-2009 Fabrice Bellard, et al. configuration: --extra-version=4:0.5.1-1ubuntu1.2 --prefix=/usr --enable-avfilter --enable-avfilter-lavf --enable-vdpau --enable-bzlib --enable-libgsm --e



    org.alfresco.repo.content.transform.RuntimeExecutableContentTransformerWorker.transform(RuntimeExecutableContentTransformerWorker.java:272)

    org.alfresco.repo.content.transform.ProxyContentTransformer.transformInternal(ProxyContentTransformer.java:68)

    org.alfresco.repo.content.transform.AbstractContentTransformer2.transform(AbstractContentTransformer2.java:161)

    org.alfresco.repo.content.ContentServiceImpl.transform(ContentServiceImpl.java:555)

    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

    java.lang.reflect.Method.invoke(Method.java:597)

    org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:307)

    org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)

    org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)

    net.sf.acegisecurity.intercept.method.aopalliance.MethodSecurityInterceptor.invoke(MethodSecurityInterceptor.java:80)

    org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)

    org.alfresco.repo.model.ml.MLContentInterceptor.invoke(MLContentInterceptor.java:125)

    org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)

    org.alfresco.repo.security.permissions.impl.ExceptionTranslatorMethodInterceptor.invoke(ExceptionTranslatorMethodInterceptor.java:44)

    org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)

    org.alfresco.repo.audit.AuditMethodInterceptor.proceed(AuditMethodInterceptor.java:160)

    org.alfresco.repo.audit.AuditMethodInterceptor.invoke(AuditMethodInterceptor.java:137)

    org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)

    org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:107)

    org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)

    org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)

    $Proxy42.transform(Unknown Source)

    org.alfresco.repo.action.executer.TransformActionExecuter.doTransform(TransformActionExecuter.java:305)

    org.alfresco.repo.action.executer.TransformActionExecuter.executeImpl(TransformActionExecuter.java:270)

    org.alfresco.repo.action.executer.ActionExecuterAbstractBase.execute(ActionExecuterAbstractBase.java:133)

    org.alfresco.repo.action.ActionServiceImpl.directActionExecution(ActionServiceImpl.java:749)

    org.alfresco.repo.action.ActionServiceImpl.executeActionImpl(ActionServiceImpl.java:675)

    org.alfresco.repo.action.ActionServiceImpl.executeAction(ActionServiceImpl.java:540)

    org.alfresco.repo.action.ActionServiceImpl.executeAction(ActionServiceImpl.java:526)

    org.alfresco.repo.action.ActionServiceImpl.executeAction(ActionServiceImpl.java:758)

    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

    java.lang.reflect.Method.invoke(Method.java:597)

    org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:307)

    org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)

    org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)

    org.alfresco.repo.security.permissions.impl.AlwaysProceedMethodInterceptor.invoke(AlwaysProceedMethodInterceptor.java:34)

    org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)

    org.alfresco.repo.security.permissions.impl.ExceptionTranslatorMethodInterceptor.invoke(ExceptionTranslatorMethodInterceptor.java:44)

    org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)

    org.alfresco.repo.audit.AuditMethodInterceptor.proceedWithAudit(AuditMethodInterceptor.java:217)

    org.alfresco.repo.audit.AuditMethodInterceptor.proceed(AuditMethodInterceptor.java:184)

    org.alfresco.repo.audit.AuditMethodInterceptor.invoke(AuditMethodInterceptor.java:137)

    org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)

    org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:107)

    org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)

    org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)

    $Proxy34.executeAction(Unknown Source)

    org.alfresco.repo.jscript.ScriptAction.executeImpl(ScriptAction.java:147)

    org.alfresco.repo.jscript.ScriptAction.execute(ScriptAction.java:136)

    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

    java.lang.reflect.Method.invoke(Method.java:597)

    org.mozilla.javascript.MemberBox.invoke(MemberBox.java:155)

    org.mozilla.javascript.NativeJavaMethod.call(NativeJavaMethod.java:243)

    org.mozilla.javascript.optimizer.OptRuntime.call1(OptRuntime.java:66)

    org.mozilla.javascript.gen.c59._c9(workspace://SpacesStore/Company Home/Data Dictionary/Web Scripts Extensions/com/inventiaplus/gcd/fondo/creado.post.js:459)

    org.mozilla.javascript.gen.c59.call(workspace://SpacesStore/Company Home/Data Dictionary/Web Scripts Extensions/com/inventiaplus/gcd/fondo/creado.post.js)

    org.mozilla.javascript.optimizer.OptRuntime.callName(OptRuntime.java:97)

    org.mozilla.javascript.gen.c59._c0(workspace://SpacesStore/Company Home/Data Dictionary/Web Scripts Extensions/com/inventiaplus/gcd/fondo/creado.post.js:271)

    org.mozilla.javascript.gen.c59.call(workspace://SpacesStore/Company Home/Data Dictionary/Web Scripts Extensions/com/inventiaplus/gcd/fondo/creado.post.js)

    org.mozilla.javascript.ContextFactory.doTopCall(ContextFactory.java:393)

    org.mozilla.javascript.ScriptRuntime.doTopCall(ScriptRuntime.java:2834)

    org.mozilla.javascript.gen.c59.call(workspace://SpacesStore/Company Home/Data Dictionary/Web Scripts Extensions/com/inventiaplus/gcd/fondo/creado.post.js)

    org.mozilla.javascript.gen.c59.exec(workspace://SpacesStore/Company Home/Data Dictionary/Web Scripts Extensions/com/inventiaplus/gcd/fondo/creado.post.js)

    org.alfresco.repo.jscript.RhinoScriptProcessor.executeScriptImpl(RhinoScriptProcessor.java:472)

    org.alfresco.repo.jscript.RhinoScriptProcessor.execute(RhinoScriptProcessor.java:190)

    org.alfresco.repo.processor.ScriptServiceImpl.executeScript(ScriptServiceImpl.java:282)

    org.alfresco.repo.web.scripts.RepositoryScriptProcessor.executeScript(RepositoryScriptProcessor.java:102)

    org.springframework.extensions.webscripts.AbstractWebScript.executeScript(AbstractWebScript.java:981)

    org.springframework.extensions.webscripts.DeclarativeWebScript.execute(DeclarativeWebScript.java:86)

    org.alfresco.repo.web.scripts.RepositoryContainer$2.execute(RepositoryContainer.java:383)

    org.alfresco.repo.transaction.RetryingTransactionHelper.doInTransaction(RetryingTransactionHelper.java:381)

    org.alfresco.repo.web.scripts.RepositoryContainer.transactionedExecute(RepositoryContainer.java:436)

    org.alfresco.repo.web.scripts.RepositoryContainer.transactionedExecuteAs(RepositoryContainer.java:466)

    org.alfresco.repo.web.scripts.RepositoryContainer.executeScript(RepositoryContainer.java:304)

    org.springframework.extensions.webscripts.AbstractRuntime.executeScript(AbstractRuntime.java:333)

    org.springframework.extensions.webscripts.AbstractRuntime.executeScript(AbstractRuntime.java:189)

    org.springframework.extensions.webscripts.servlet.WebScriptServlet.service(WebScriptServlet.java:118)

    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

    org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)

    org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)

    org.alfresco.web.app.servlet.GlobalLocalizationFilter.doFilter(GlobalLocalizationFilter.java:58)

    org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)

    org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)

    org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)

    org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)

    org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)

    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)

    org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)

    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)

    org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852)

    org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)

    org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)

    java.lang.Thread.run(Thread.java:619)


    Exception:  org.alfresco.service.cmr.repository.ContentIOException - 09180028 Content conversion failed: reader: ContentAccessor[ contentUrl=store://2011/10/18/20/56/65b3457f-c37c-4404-b4b7-9abac30f018d.bin, mimetype=video/x-msvideo, size=1614694, encoding=null, locale=es_ES] writer: ContentAccessor[ contentUrl=store://2011/10/18/20/56/e92d00e2-7bd8-4bdd-8d50-b61fe4bac903.bin, mimetype=video/x-flv, size=0, encoding=null, locale=es_ES] options: org.alfresco.service.cmr.repository.TransformationOptions@745ce55



    org.alfresco.repo.content.transform.AbstractContentTransformer2.transform(AbstractContentTransformer2.java:177)


    Exception:  org.alfresco.scripts.ScriptException - 09180029 Failed to execute script &#39;/com/inventiaplus/gcd/fondo/creado.post.js (in repository store workspace://SpacesStore/Company Home/Data Dictionary/Web Scripts Extensions)&#39;: 09180028 Content conversion failed: reader: ContentAccessor[ contentUrl=store://2011/10/18/20/56/65b3457f-c37c-4404-b4b7-9abac30f018d.bin, mimetype=video/x-msvideo, size=1614694, encoding=null, locale=es_ES] writer: ContentAccessor[ contentUrl=store://2011/10/18/20/56/e92d00e2-7bd8-4bdd-8d50-b61fe4bac903.bin, mimetype=video/x-flv, size=0, encoding=null, locale=es_ES] options: org.alfresco.service.cmr.repository.TransformationOptions@745ce55



    org.alfresco.repo.jscript.RhinoScriptProcessor.execute(RhinoScriptProcessor.java:194)


    Exception:  org.springframework.extensions.webscripts.WebScriptException - 09180016 Wrapped Exception (with status template): 09180029 Failed to execute script &#39;/com/inventiaplus/gcd/fondo/creado.post.js (in repository store workspace://SpacesStore/Company Home/Data Dictionary/Web Scripts Extensions)&#39;: 09180028 Content conversion failed: reader: ContentAccessor[ contentUrl=store://2011/10/18/20/56/65b3457f-c37c-4404-b4b7-9abac30f018d.bin, mimetype=video/x-msvideo, size=1614694, encoding=null, locale=es_ES] writer: ContentAccessor[ contentUrl=store://2011/10/18/20/56/e92d00e2-7bd8-4bdd-8d50-b61fe4bac903.bin, mimetype=video/x-flv, size=0, encoding=null, locale=es_ES] options: org.alfresco.service.cmr.repository.TransformationOptions@745ce55



    org.springframework.extensions.webscripts.AbstractWebScript.createStatusException(AbstractWebScript.java:758)


    Server: Community v3.4.0 (c 3335) schema 4,113
    Time:   Oct 18, 2011 8:56:51 PM


    Diagnostics:    Inspect Web Script (com/inventiaplus/gcd/fondo/creado.post)

    I don't know where is the problem
    Somebody can help me ?

    I did some changes...

    avi2flv-transform-context.xml :

    <entry key="Linux">
           <value>ffmpeg -y -i &#39;${target}&#39; ${flv.encoder.params} &#39;${source}&#39;</value>
    </entry>

    Source <-> Target

    <props>
       <prop key="flv.encoder.params">-threads 2 -s 320x240 -r 29.97 -threads 1 -pix_fmt yuv420p -g 300 -qmin 3 -b 512k -async 50 -ar 44100 -ac 2 -ab 128k</prop>
    </props>

    change parameters

    error :

    The Web Script /alfresco/s/gcd/fondo/9fe0bf90-1875-4f51-9f75-7c35f6d0802c has responded with a status of 500 - Internal Error.

    500 Description:    An error inside the HTTP server which prevented it from fulfilling the request.

    Message:    09250001 Wrapped Exception (with status template): 09250004 Failed to execute script &#39;/com/inventiaplus/gcd/fondo/guardar.post.js (in repository store workspace://SpacesStore/Company Home/Data Dictionary/Web Scripts Extensions)&#39;: 09250003 Content conversion failed: reader: ContentAccessor[ contentUrl=store://2011/10/25/8/27/efff7050-3a67-492d-9e5b-507c03bd0a80.bin, mimetype=video/x-msvideo, size=256362496, encoding=null, locale=es_ES] writer: ContentAccessor[ contentUrl=store://2011/10/25/8/28/cb81b7f2-3c72-4266-afd7-0d1a3fb9f420.bin, mimetype=video/x-flv, size=0, encoding=null, locale=es_ES] options: org.alfresco.service.cmr.repository.TransformationOptions@18c4074f

    Exception:  org.alfresco.service.cmr.repository.ContentIOException - 09250002 Transformation failed - status indicates an error: Execution result: os: Linux command: [ffmpeg, -y, -i, &#39;/home/inventiaplus/alfresco/tomcat/temp/Alfresco/RuntimeExecutableContentTransformerWorker_target_4598080275234396407.flv&#39;, -threads 2 -s 320x240 -r 29.97 -threads 1 -pix_fmt yuv420p -g 300 -qmin 3 -b 512k -async 50 -ar 44100 -ac 2 -ab 128k, &#39;/home/inventiaplus/alfresco/tomcat/temp/Alfresco/RuntimeExecutableContentTransformerWorker_source_6538382831295915428.avi&#39;] succeeded: false exit code: 1 out: err: FFmpeg version SVN-r0.5.1-4:0.5.1-1ubuntu1.2, Copyright (c) 2000-2009 Fabrice Bellard, et al. configuration: --extra-version=4:0.5.1-1ubuntu1.2 --prefix=/usr --enable-avfilter --enable-avfilter-lavf --enable-vdpau --enable-bzlib --enable-libgsm --e

       ...

    Exception:  org.alfresco.service.cmr.repository.ContentIOException - 09250003 Content conversion failed: reader: ContentAccessor[ contentUrl=store://2011/10/25/8/27/efff7050-3a67-492d-9e5b-507c03bd0a80.bin, mimetype=video/x-msvideo, size=256362496, encoding=null, locale=es_ES] writer: ContentAccessor[ contentUrl=store://2011/10/25/8/28/cb81b7f2-3c72-4266-afd7-0d1a3fb9f420.bin, mimetype=video/x-flv, size=0, encoding=null, locale=es_ES] options: org.alfresco.service.cmr.repository.TransformationOptions@18c4074f

       org.alfresco.repo.content.transform.AbstractContentTransformer2.transform(AbstractContentTransformer2.java:177)

    Exception:  org.alfresco.scripts.ScriptException - 09250004 Failed to execute script &#39;/com/inventiaplus/gcd/fondo/guardar.post.js (in repository store workspace://SpacesStore/Company Home/Data Dictionary/Web Scripts Extensions)&#39;: 09250003 Content conversion failed: reader: ContentAccessor[ contentUrl=store://2011/10/25/8/27/efff7050-3a67-492d-9e5b-507c03bd0a80.bin, mimetype=video/x-msvideo, size=256362496, encoding=null, locale=es_ES] writer: ContentAccessor[ contentUrl=store://2011/10/25/8/28/cb81b7f2-3c72-4266-afd7-0d1a3fb9f420.bin, mimetype=video/x-flv, size=0, encoding=null, locale=es_ES] options: org.alfresco.service.cmr.repository.TransformationOptions@18c4074f

       org.alfresco.repo.jscript.RhinoScriptProcessor.execute(RhinoScriptProcessor.java:194)

    Exception:  org.springframework.extensions.webscripts.WebScriptException - 09250001 Wrapped Exception (with status template): 09250004 Failed to execute script &#39;/com/inventiaplus/gcd/fondo/guardar.post.js (in repository store workspace://SpacesStore/Company Home/Data Dictionary/Web Scripts Extensions)&#39;: 09250003 Content conversion failed: reader: ContentAccessor[ contentUrl=store://2011/10/25/8/27/efff7050-3a67-492d-9e5b-507c03bd0a80.bin, mimetype=video/x-msvideo, size=256362496, encoding=null, locale=es_ES] writer: ContentAccessor[ contentUrl=store://2011/10/25/8/28/cb81b7f2-3c72-4266-afd7-0d1a3fb9f420.bin, mimetype=video/x-flv, size=0, encoding=null, locale=es_ES] options: org.alfresco.service.cmr.repository.TransformationOptions@18c4074f

       org.springframework.extensions.webscripts.AbstractWebScript.createStatusException(AbstractWebScript.java:758)

    Server: Community v3.4.0 (c 3335) schema 4,113
    Time:   Oct 25, 2011 8:28:29 AM

    I use command line

    ffmpeg -y -i /home/inventiaplus/alfresco/tomcat/temp/Alfresco/RuntimeExecutableContentTransformerWorker_source_6538382831295915428.avi -threads 2 -s 320x240 -r 29.97 -threads 1 -pix_fmt yuv420p -g 300 -qmin 3 -b 512k -async 50 -ar 44100 -ac 2 -ab 128k /home/inventiaplus/alfresco/tomcat/temp/Alfresco/RuntimeExecutableContentTransformerWorker_target_4598080275234396407.flv

    and It works

  • Serving video stream in Node with ffmpeg

    30 mars 2023, par Spedwards

    I have a local-only utility where the backend is Adonis.js and the frontend is Vue.js. I'm trying to get a readable stream and have it play in my frontend. I have got the very basics down, the video plays, but I can't skip to anywhere else in the video, it'll just jump back to where it left off and continue playing.

    &#xA;

    I've been told that it requires a bi-directional data flow. What I was planning on doing was updating the frontend stream URL to add a query string to the end with the timestamp of where the user (me) skips to. This would go back to the backend and I'd use ffmpeg to create a new stream from the video starting at that timestamp.

    &#xA;

    The problem is that I've never really messed around with streams before and I'm finding all of this very confusing. I'm able to get a ReadStream of my video and serve it, but I can't write to it. I can create a WriteStream and have it start at my timestamp (I think) but I can't serve it because I can only return ReadStream, ReadWriteStream, or ReadableStream. The ReadWriteStream sounds perfect but I have no idea how to create one and I couldn't find anything fruitful after a few hours of searching, nor could I find anyway of converting a WriteStream to a ReadStream.

    &#xA;

    There's also the problem I alluded to ; I have no idea if my ffmpeg method is actually working since I can't serve it to test.

    &#xA;

    My working controller method without any of the timestamp stuff is as follows :

    &#xA;

    public async stream({ params, response }: HttpContextContract) {&#xA;    const file = await File.find(params.id)&#xA;    if (!file) {&#xA;        return response.badRequest()&#xA;    }&#xA;    const stream = await Drive.getStream(file.path) // this creates a ReadableStream&#xA;    return response.stream(stream)&#xA;}&#xA;

    &#xA;

    For all the ffmpeg stuff, I'm using fluent-ffmpeg as it was the best wrapper I could find.

    &#xA;

    This was my first attempt.

    &#xA;

    public async stream({ params, request, response }: HttpContextContract) {&#xA;    const file = await File.find(params.id)&#xA;    if (!file) {&#xA;        return response.badRequest()&#xA;    }&#xA;    const stream = await Drive.getStream(file.path) // this creates a ReadableStream&#xA;    if (request.input(&#x27;t&#x27;)) {&#xA;        const timestamp = request.input(&#x27;t&#x27;)&#xA;        ffmpeg()&#xA;            .input(stream)&#xA;            .seekInput(timestamp)&#xA;            .output(stream)&#xA;    }&#xA;    return response.stream(stream)&#xA;}&#xA;

    &#xA;

    How can I achieve what I want ? Am I going about this the wrong way and/or is there a better way ?

    &#xA;