Recherche avancée

Médias (9)

Mot : - Tags -/soundtrack

Autres articles (46)

  • Publier sur MédiaSpip

    13 juin 2013

    Puis-je poster des contenus à partir d’une tablette Ipad ?
    Oui, si votre Médiaspip installé est à la version 0.2 ou supérieure. Contacter au besoin l’administrateur de votre MédiaSpip pour le savoir

  • MediaSPIP Player : problèmes potentiels

    22 février 2011, par

    Le lecteur ne fonctionne pas sur Internet Explorer
    Sur Internet Explorer (8 et 7 au moins), le plugin utilise le lecteur Flash flowplayer pour lire vidéos et son. Si le lecteur ne semble pas fonctionner, cela peut venir de la configuration du mod_deflate d’Apache.
    Si dans la configuration de ce module Apache vous avez une ligne qui ressemble à la suivante, essayez de la supprimer ou de la commenter pour voir si le lecteur fonctionne correctement : /** * GeSHi (C) 2004 - 2007 Nigel McNie, (...)

  • Keeping control of your media in your hands

    13 avril 2011, par

    The vocabulary used on this site and around MediaSPIP in general, aims to avoid reference to Web 2.0 and the companies that profit from media-sharing.
    While using MediaSPIP, you are invited to avoid using words like "Brand", "Cloud" and "Market".
    MediaSPIP is designed to facilitate the sharing of creative media online, while allowing authors to retain complete control of their work.
    MediaSPIP aims to be accessible to as many people as possible and development is based on expanding the (...)

Sur d’autres sites (6898)

  • Music bot doesn't play livestreams anymore

    31 janvier 2019, par Silvinator

    My Discord bot played YT Livestreams all the time, but it stopped working today. The only message I get (in the console) is stream. It plays normal videos, but no streams.
    The question is, why it stopped working ? I did not change any code. Anyone got a idea ?

    client.on("message", async message => {
     var args = message.content.substring(prefix.length).split(" ");
     if (!message.content.startsWith(prefix)) return;
     var searchString = args.slice(1).join(' ');
     var url = args[1] ? args[1].replace(/<(.+)>/g, '$1') : '';
     var serverQueue = queue.get(message.guild.id);
     switch (args[0].toLowerCase()) {
       case "play":
         var voiceChannel = message.member.voiceChannel;
         if (!voiceChannel) return message.channel.send(`Du willst mit mir Karaoke singen? Da ich eh nichts besseres zu tun habe. Du suchst aber den Voice Channel aus!`);
         var permissions = voiceChannel.permissionsFor(message.client.user);
         if (!permissions.has('CONNECT')) {
           return message.channel.send('I cannot connect to your voice channel, make sure I have the proper permissions!');
         }
         if (!permissions.has('SPEAK')) {
           return message.channel.send('I cannot speak in this voice channel, make sure I have the proper permissions!');
         }
         if (url.match(/^https?:\/\/(www.youtube.com|youtube.com)\/playlist(.*)$/)) {
           var playlist = await youtube.getPlaylist(url);
           var videos = await playlist.getVideos();
           for (const video of Object.values(videos)) {
             var video2 = await youtube.getVideoByID(video.id); // eslint-disable-line no-await-in-loop
             await handleVideo(video2, message, voiceChannel, true); // eslint-disable-line no-await-in-loop
           }
           return message.channel.send(`Ich habe wohl keine andere wahl... Ich habe **${playlist.title}** der playlist zugefügt`);
         } else {
           try {
             var video = await youtube.getVideo(url);
           } catch (error) {
             try {
               var videos = await youtube.searchVideos(searchString, 10);
               var index = 0;
               var videoIndex = 1;
               var video = await youtube.getVideoByID(videos[videoIndex - 1].id);
             } catch (err) {
               console.error(err);
               return message.channel.send('Gibt es den Song überhaupt?');
             }
           }
           return handleVideo(video, message, voiceChannel);
         }
         break;
       case "skip":
         if (!message.member.voiceChannel) return message.channel.send('Du musst schon in den Voice Channel gehen, baka!');
         if (!serverQueue) return message.channel.send('Du musst schon ein song auswählen, baka!');
         serverQueue.connection.dispatcher.end('Skip command has been used!');
         return undefined;
         break;
       case "stop":
         if (!message.member.voiceChannel) return message.channel.send('Du musst schon in den Voice Channel gehen, baka!');
         if (!serverQueue) return message.channel.send('Du musst schon einen Song auswählen, baka');
         serverQueue.connection.dispatcher.end('Stop command has been used!');
         serverQueue.songs = [];
         return undefined;
         break;
       case "minfo":
         if (!serverQueue) return message.channel.send('Ich spiele immer noch nichts!');
         return message.channel.send(`ퟎ
  • varying RTP stream result from custom SIP implementation

    1er février, par Nik Hendricks

    I 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.

    


  • Piwik Developer Guides : helping you make the most of the Piwik platform

    16 avril 2015, par Piwik Core Team — Community, Development, Plugins

    At Piwik we are creating the leading open analytics platform that gives every user full control over their data. Today we are excited to announce the official launch of the Piwik Developer Guides at developer.piwik.org. The Developer Guides complement existing User Guides and more than 250 FAQs.

    Piwik Developer Guides

    The Developer guides will help you whenever you need to :

    Helping Developers innovate with Piwik

    Piwik is an open platform – it is open because users control their data, users control the Piwik software (it is Free/libre software) and also because users can extend the platform via the powerful plugins architecture. Piwik users can already choose from 49 plugins available on the Marketplace ! (as of 2015 April 16th)

    Now that developer guides are officially released, we are hopeful that even more talented developers will be able to create Plugins and distribute them on the Marketplace.

    Share your feedback

    We are committed to providing excellent Developer Guides and to achieve this, we need to hear your feedback and suggestions. To send us a message, click on the “Give Feedback” link in the footer of pages (we are listening !).

    What’s coming next ?

    • Platform Developer Changelog will continue to list all changes to the Piwik Platform and APIs.
    • We will regularly update the guides when there are changes in the platform.
    • We will improve existing guides based on users’ feedback and suggestions (tasks are tracked in this issue tracker on Github.)

    We hope you find the guides useful, and thank you for being part of the Piwik community !