
Recherche avancée
Autres articles (70)
-
MediaSPIP version 0.1 Beta
16 avril 2011, parMediaSPIP 0.1 beta est la première version de MediaSPIP décrétée comme "utilisable".
Le fichier zip ici présent contient uniquement les sources de MediaSPIP en version standalone.
Pour avoir une installation fonctionnelle, il est nécessaire d’installer manuellement l’ensemble des dépendances logicielles sur le serveur.
Si vous souhaitez utiliser cette archive pour une installation en mode ferme, il vous faudra également procéder à d’autres modifications (...) -
MediaSPIP 0.1 Beta version
25 avril 2011, parMediaSPIP 0.1 beta is the first version of MediaSPIP proclaimed as "usable".
The zip file provided here only contains the sources of MediaSPIP in its standalone version.
To get a working installation, you must manually install all-software dependencies on the server.
If you want to use this archive for an installation in "farm mode", you will also need to proceed to other manual (...) -
Amélioration de la version de base
13 septembre 2013Jolie sélection multiple
Le plugin Chosen permet d’améliorer l’ergonomie des champs de sélection multiple. Voir les deux images suivantes pour comparer.
Il suffit pour cela d’activer le plugin Chosen (Configuration générale du site > Gestion des plugins), puis de configurer le plugin (Les squelettes > Chosen) en activant l’utilisation de Chosen dans le site public et en spécifiant les éléments de formulaires à améliorer, par exemple select[multiple] pour les listes à sélection multiple (...)
Sur d’autres sites (11201)
-
Is ffmpeg able to read ArrayBuffer input from stream
7 juillet 2017, par jAndyI want to accomplish the following tasks :
- Record Video+Audio from any HTML5 (
MediaStream
) capable browser - Send that data via
WebSocket
asBlob
/ArrayBuffer
chunks to a server - Broadcast that input stream-data to multiple clients
As it turns out, this brought me into a world of pain. The first task is fairly simple using the HTML5
MediaStream
objects alongside WebSockets.// ... for simplicity...
navigator.mediaDevices.getUserMedia({ audio: true, video: true }).then(stream => {
let mediaRecorder = new MediaRecorder( stream );
// ...
mediaRecorder.ondataavailable = e => {
webSocket.send( 'newVideoData', e.data ); // configured for binary data
};
});Now, I want to receive those data fragments and stream those via
nginx vod module
, because I guess I want the output stream in HLS or DASH.
I could write a littlenodejs
script as backend, which just receives the binary chunks and write them to a file or stream, and just reference it songinx vod module
could possibly read it and create them3u8
manifest on the fly ?I am wondering now,
- if
ffmpeg
is able to read that binary data directly (should bewebm format
), without a man-in-the-middle script, "somehow" ? - If not, do I have to write the data down into a file and pass that as input to
ffmpeg
or can I (should I) pipe the data to a self spawnedffmpeg
instance ? (if so, how ?) - Do I actually need the
nginx server
(probably alongside rtmp module) to deliver the output stream as HLS or could I just useffmpeg
to also create a dynamic manifest ? - Is the
nginx vod module
capable of creating a dynamic hls/dash manifest or must the input data be complete beforehand ? - Ultimately, am I on the totally wrong track here ? :P
Actually I just want to create a little video-live-chat demo, without any plugins or 3rd party encoding software, pure browser.
- Record Video+Audio from any HTML5 (
-
Ffmpeg : Bitstream not supported by this decoder
23 décembre 2018, par John KimI’m trying to create a livestream web app using NodeJS. The code I currently have emits a raw (webm format) binary stream from the webcam on the client using socket IO and the node server receives this raw data. Using fluent-ffmpeg, I want to encode this binary stream into mpegts and send it to an RTMP server in real time, without creating any intermediary files. However when trying to convert the blobs in ffmpeg I get the following error :
Error while decoding stream #0:1: Invalid data found when processing input
[NULL @ 000001b15e67bd80] Invalid sync code 61f192.
[libvpx @ 000001b15e6c5000] Failed to decode frame: Bitstream not supported by this decoderMy relevant frontend client code :
navigator.mediaDevices.getUserMedia(constraints).then(function(stream) {
video_show(stream);//only show locally, not remotely
socket.emit('config_rtmpDestination',url);
socket.emit('start','start');
var options = {mimeType: 'video/webm;codecs=h264'};
mediaRecorder = new MediaRecorder(stream, options);
mediaRecorder.start(2000);
mediaRecorder.onstop = function(e) {
stream.stop();
}
mediaRecorder.ondataavailable = function(e) {
//var arraybuffer = Uint8Array.from(e.data).buffer;
socket.emit("binarystream", blob);
//chunks.push(e.data);
}
}).catch(function(err) {
console.log('The following error occured: ' + err);
show_output('Local getUserMedia ERROR:'+err);
});Relevant NodeJS server code :
socket.on('binarystream',function(m){
feedStream(m);
});
socket.on('start',function(m){
...
var ops=[
'-vcodec', socket._vcodec,'-i','-',
'-c:v', 'libx264', '-preset', 'veryfast', '-tune', 'zerolatency',
'-an', '-bufsize', '1000',
'-f', 'mpegts', socket._rtmpDestination
];
ffmpeg_process=spawn('ffmpeg', ops);
feedStream=function(data){
ffmpeg_process.stdin.write(data);
}
...
} -
Encountered an exception of ffmpeg.wasm can only run one command at a time
2 mars 2023, par Itay113I want to make a video chat using ffmepg wasm (I know the standard is WebRTC but my assignment is to do this with ffmpeg wasm and a server connecting the 2 clients) and when doing the follow code I am getting ffmpeg.wasm can only run one command at a time exception on the ffmpegWorker.run line


function App() {
 const ffmpegWorker = createFFmpeg({
 log: true
 })

 async function initFFmpeg() {
 await ffmpegWorker.load();
 }

 async function transcode(webcamData) {
 const name = 'record.webm';
 await ffmpegWorker.FS('writeFile', name, await fetchFile(webcamData));
 ffmpegWorker.run('-i', name, '-preset', 'ultrafast', '-c:v', 'h264', '-crf', '28', '-b:v', '0', '-row-mt', '1', '-f', 'mp4', 'output.mp4')
 .then(()=> {

 const data = ffmpegWorker.FS('readFile', 'output.mp4');
 
 const video = document.getElementById('output-video');
 video.src = URL.createObjectURL(new Blob([data.buffer], { type: 'video/mp4' }));
 ffmpegWorker.FS('unlink', 'output.mp4');
 })
 }

 function requestMedia() {
 const webcam = document.getElementById('webcam');
 const chunks = []
 navigator.mediaDevices.getUserMedia({ video: true, audio: true })
 .then(async (stream) => {
 webcam.srcObject = stream;
 await webcam.play();
 const mediaRecorder = new MediaRecorder(stream);
 mediaRecorder.start(0);
 mediaRecorder.onstop = function(e) {
 stream.stop(); 
 }
 mediaRecorder.ondataavailable = async function(e) {
 chunks.push(e.data);
 await transcode(new Uint8Array(await (new Blob(chunks)).arrayBuffer()));
 
 }
 })
 }

 useEffect(() => {
 requestMedia();
 }, [])

 return (
 <div classname="App">
 <div>
 <video width="320px" height="180px"></video>
 <video width="320px" height="180px"></video>
 </div>
 </div>
 );
}



I have tried messing around with the time slice on the media recorder start method argument but it didn't helped