Recherche avancée
Médias (91)
-
999,999
26 septembre 2011, par
Mis à jour : Septembre 2011
Langue : English
Type : Audio
-
The Slip - Artworks
26 septembre 2011, par
Mis à jour : Septembre 2011
Langue : English
Type : Texte
-
Demon seed (wav version)
26 septembre 2011, par
Mis à jour : Avril 2013
Langue : English
Type : Audio
-
The four of us are dying (wav version)
26 septembre 2011, par
Mis à jour : Avril 2013
Langue : English
Type : Audio
-
Corona radiata (wav version)
26 septembre 2011, par
Mis à jour : Avril 2013
Langue : English
Type : Audio
-
Lights in the sky (wav version)
26 septembre 2011, par
Mis à jour : Avril 2013
Langue : English
Type : Audio
Autres articles (112)
-
Websites made with MediaSPIP
2 mai 2011, parThis page lists some websites based on MediaSPIP.
-
Des sites réalisés avec MediaSPIP
2 mai 2011, parCette 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, parMediaSPIP 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 DocticoI 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 MasanchezI'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 '${target}' ${flv.encoder.params} '${source}'</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('Se ha creado el fichero '+nombrefichero+field.filename);
}else
model.mensajes.push('Ha ocurrido un error cuando se intentaba crear el fichero '+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 '/com/inventiaplus/gcd/fondo/creado.post.js (in repository store workspace://SpacesStore/Company Home/Data Dictionary/Web Scripts Extensions)': 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, '/home/inventiaplus/alfresco/tomcat/temp/Alfresco/RuntimeExecutableContentTransformerWorker_target_3008293789769608319.flv', -vcodec flv, '/home/inventiaplus/alfresco/tomcat/temp/Alfresco/RuntimeExecutableContentTransformerWorker_source_5021918644492976031.avi'] 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 '/com/inventiaplus/gcd/fondo/creado.post.js (in repository store workspace://SpacesStore/Company Home/Data Dictionary/Web Scripts Extensions)': 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 '/com/inventiaplus/gcd/fondo/creado.post.js (in repository store workspace://SpacesStore/Company Home/Data Dictionary/Web Scripts Extensions)': 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 '${target}' ${flv.encoder.params} '${source}'</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 '/com/inventiaplus/gcd/fondo/guardar.post.js (in repository store workspace://SpacesStore/Company Home/Data Dictionary/Web Scripts Extensions)': 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, '/home/inventiaplus/alfresco/tomcat/temp/Alfresco/RuntimeExecutableContentTransformerWorker_target_4598080275234396407.flv', -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_source_6538382831295915428.avi'] 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 '/com/inventiaplus/gcd/fondo/guardar.post.js (in repository store workspace://SpacesStore/Company Home/Data Dictionary/Web Scripts Extensions)': 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 '/com/inventiaplus/gcd/fondo/guardar.post.js (in repository store workspace://SpacesStore/Company Home/Data Dictionary/Web Scripts Extensions)': 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 AMI 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.flvand It works
-
Serving video stream in Node with ffmpeg
30 mars 2023, par SpedwardsI 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.


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.


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, orReadableStream. TheReadWriteStreamsounds 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.

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.


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


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


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


This was my first attempt.


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


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