
Recherche avancée
Autres articles (102)
-
Le profil des utilisateurs
12 avril 2011, parChaque utilisateur dispose d’une page de profil lui permettant de modifier ses informations personnelle. Dans le menu de haut de page par défaut, un élément de menu est automatiquement créé à l’initialisation de MediaSPIP, visible uniquement si le visiteur est identifié sur le site.
L’utilisateur a accès à la modification de profil depuis sa page auteur, un lien dans la navigation "Modifier votre profil" est (...) -
Configurer la prise en compte des langues
15 novembre 2010, parAccéder à la configuration et ajouter des langues prises en compte
Afin de configurer la prise en compte de nouvelles langues, il est nécessaire de se rendre dans la partie "Administrer" du site.
De là, dans le menu de navigation, vous pouvez accéder à une partie "Gestion des langues" permettant d’activer la prise en compte de nouvelles langues.
Chaque nouvelle langue ajoutée reste désactivable tant qu’aucun objet n’est créé dans cette langue. Dans ce cas, elle devient grisée dans la configuration et (...) -
XMP PHP
13 mai 2011, parDixit Wikipedia, XMP signifie :
Extensible Metadata Platform ou XMP est un format de métadonnées basé sur XML utilisé dans les applications PDF, de photographie et de graphisme. Il a été lancé par Adobe Systems en avril 2001 en étant intégré à la version 5.0 d’Adobe Acrobat.
Étant basé sur XML, il gère un ensemble de tags dynamiques pour l’utilisation dans le cadre du Web sémantique.
XMP permet d’enregistrer sous forme d’un document XML des informations relatives à un fichier : titre, auteur, historique (...)
Sur d’autres sites (16856)
-
Best way to take a live-video-stream and split the image into thirds to broadcast out ?
3 avril 2020, par user1258530Can anyone tell me the best tools to make this work ? I basically need to pass a video-feed from an Arduino device, stream it into the cloud, and then have the cloud-video-server "slice" that video feed into thirds (top third, middle third, and bottom-third), and simultaneously stream each of those third-video-slices out to the world via m3u8 (HLS) endpoint.



I know I can pass video up to the cloud via ffmpeg or via RTMP - - - but I haven't found the method yet for the cloud-video-server-based "slicing" process. I haven't found an ffmpeg way to do it, and I haven't found a Wowza server way to do it, nor an OpenCV way to do it. Lots of examples of cropping, but I haven't found examples of cropping multiple segments at the same time and streaming out simultaneously.



Any advice is greatly appreciated.


-
varying RTP stream result from custom SIP implementation
1er février, par Nik HendricksI am in the process of creating my own SIP implementation in Node.js. As well as a b2bua as a learning project.


Finding people wise in the ways of SIP has proved to be difficult elsewhere but here I have had good results


this is the GitHub of my library so far node.js-sip


this is the GitHub of my PBX so far FlowPBX


Currently, everything is working as I expect. Although I really have some questions on possible errors in my implementation.


My main issue is with RTP streams. Currently I am utilizing ffmpeg.


my function goes as follows


start_stream(call_id, sdp){
 console.log('Starting Stream')
 let port = sdp.match(/m=audio (\d+) RTP/)[1];
 let ip = sdp.match(/c=IN IP4 (\d+\.\d+\.\d+\.\d+)/)[1];
 let codec_ids = sdp.match(/m=audio \d+ RTP\/AVP (.+)/)[1].split(' ');
 let ffmpeg_codec_map = {
 'opus': 'libopus',
 'PCMU': 'pcm_mulaw',
 'PCMA': 'pcm_alaw',
 'telephone-event': 'pcm_mulaw',
 'speex': 'speex',
 'G722': 'g722',
 'G729': 'g729',
 'GSM': 'gsm',
 'AMR': 'amr',
 'AMR-WB': 'amr_wb',
 'iLBC': 'ilbc',
 'iSAC': 'isac',
 }

 let codecs = [];
 sdp.split('\n').forEach(line => {
 if(line.includes('a=rtpmap')){
 let codec = line.match(/a=rtpmap:(\d+) (.+)/)[2];
 let c_id = line.match(/a=rtpmap:(\d+) (.+)/)[1];
 codecs.push({ 
 name: codec.split('/')[0],
 rate: codec.split('/')[1],
 channels: codec.split('/')[2] !== undefined ? codec.split('/')[2] : 1,
 id: c_id
 })
 }
 })

 console.log('codecs')
 console.log(codecs)

 let selected_codec = codecs[0]
 if(selected_codec.name == 'telephone-event'){
 selected_codec = codecs[1]
 console.log(selected_codec)
 }

 //see if opus is available
 codecs.forEach(codec => {
 if(codec.name == 'opus'){
 selected_codec = codec;
 }
 })

 if(selected_codec.name != 'opus'){
 //check if g729 is available
 codecs.forEach(codec => {
 if(codec.name == 'G729'){
 selected_codec = codec;
 }
 })
 }

 console.log('selected_codec')
 console.log(selected_codec)

 let spawn = require('child_process').spawn;
 let ffmpegArgs = [
 '-re',
 '-i', 'song.mp3',
 '-acodec', ffmpeg_codec_map[selected_codec.name],
 '-ar', selected_codec.rate,
 '-ac', selected_codec.channels,
 '-payload_type', selected_codec.id,
 '-f', 'rtp', `rtp://${ip}:${port}`
 ];

 let ffmpeg = spawn('ffmpeg', ffmpegArgs);

 ffmpeg.stdout.on('data', (data) => {
 console.log(`stdout: ${data}`);
 });
 ffmpeg.stderr.on('data', (data) => {
 console.error(`stderr: ${data}`);
 });




}



When using zoiper to test it works great. I have seen the mobile version negotiate speex
and the desktop version negotiate opus mostly for the codec.


today I tried to register a grandstream phone to my pbx and the rtp stream is blank audio.
opus is available and I have tried to prefer that in my stream but still even when selecting that I cannot get audio to the grandstream phone. This is the same case for a yealink phone. I can only get zoiper to work so far.


what could be causing this behavior ? there is a clear path of communication between everything just like the zoiper client's I have used.


Additionally in my sip implementation,
how important is the concept of a dialog ? currently, I just match messages by
Call-ID


and then choose what to send based on the method or response. is there any other underlying dialog functionality that I may need to implement ?


It would just be awesome to get someone who really knows what they are talking about eyes on some of my code to direct this large codebase in the right direction but I realize that a big ask lol.


-
Given 2 input videos of different lengths at 60 FPS with multiple common sections in between, what is the best way to sync them at the common section ?
27 janvier 2024, par PirateApp

- 

- In my actual case, there are 4 videos (basically gaming videos recorded from 4 different machines)
- Each video may start or end at different duration (manually controlled by people starting and stopping recording and therefore their lengths vary slightly)
- Each video has one or more common sections (basically a cutscene playing at the same time)
- The distance between the common sections is the same in every video
- How do I sync the videos at the common section ?
- Basically I want to create a split screen video such that the common part plays at the same time on all the sub parts of the video
- Keep in mind that the common sections wont be EXACTLY equal (because of graphics differences between machines but highly similar like dx9 vs dx11 or gamma)
What have I tried ?
- Naive approach
- Start video 1 at 0, start video 2 at 0.017, render the whole thing and check if it is in sync
- Start video 1 at 0, start video 2 at 0.033, render the whole thing and check if it is in sync
- Basically loop through the length of the video at each frame interval, render the full video and check if we get a synced version
























This sounds like a terrible idea honestly


for (t1 in length of video a) {
 for (t2 in length of video b) {
 render a video with a and b starting at t1, t2 respectively
 increment t2 by 0.017 for b
 }
 increment t1 by 0.017 for a
 }



Final output with 4 videos should look like this all synced at common sections



Any better ideas ?