Recherche avancée

Médias (91)

Autres articles (89)

  • Mise à jour de la version 0.1 vers 0.2

    24 juin 2013, par

    Explications des différents changements notables lors du passage de la version 0.1 de MediaSPIP à la version 0.3. Quelles sont les nouveautés
    Au niveau des dépendances logicielles Utilisation des dernières versions de FFMpeg (>= v1.2.1) ; Installation des dépendances pour Smush ; Installation de MediaInfo et FFprobe pour la récupération des métadonnées ; On n’utilise plus ffmpeg2theora ; On n’installe plus flvtool2 au profit de flvtool++ ; On n’installe plus ffmpeg-php qui n’est plus maintenu au (...)

  • Personnaliser en ajoutant son logo, sa bannière ou son image de fond

    5 septembre 2013, par

    Certains thèmes prennent en compte trois éléments de personnalisation : l’ajout d’un logo ; l’ajout d’une bannière l’ajout d’une image de fond ;

  • Ecrire une actualité

    21 juin 2013, par

    Présentez les changements dans votre MédiaSPIP ou les actualités de vos projets sur votre MédiaSPIP grâce à la rubrique actualités.
    Dans le thème par défaut spipeo de MédiaSPIP, les actualités sont affichées en bas de la page principale sous les éditoriaux.
    Vous pouvez personnaliser le formulaire de création d’une actualité.
    Formulaire de création d’une actualité Dans le cas d’un document de type actualité, les champs proposés par défaut sont : Date de publication ( personnaliser la date de publication ) (...)

Sur d’autres sites (11923)

  • nginx-rtmp + ffmpeg move mp4's moov to head on the fly

    14 février 2017, par eddie.xie

    I have the following use case :

    1) Alice publish stream to the nginx-rtmp server

    2) The server convert the stream to mp4 (default is flv if I understand correctly, and a codec transformation is needed)

    3) Bob should be able to do range request to that mp4 file while Alice is still publishing

    However it seems ffmpeg command for converting a flv to mp4 can only be done when the mp4 file is fully generated, and then ffmpeg will do second pass and move "moov" to its new file’s head

    Our use case is to allow Bob use range request to retrive the mp4 file while Alice is still publishing (i.e. watch Alice’s video as soon as possible) from time 0 (i.e. from the second Alice started publishing). Thus with mp4’s moov at its head, it’s simple to do range requests and implement the functionality. Raw RTMP doesn’t seem to solve our problem, since we can’t let Bob watch from time 0 of Alice’s recording.

    The question is :
    1) Is it possible to do it while the flv is not fully generated yet ?
    2) Any other idea how shall we use nginx-rtmp/ffmpeg to achieve the functionality we desire ?

    Thanks a bunch

  • Need Help Making Java Script Discord Music Bot

    2 février 2017, par Gambino

    I have tried to use this code to make a discord music bot but i am getting error telling me i need ffmpeg, but how would I implement it into this code ?

    index.js file

    const Discord = require('discord.js');
    const bot = new Discord.Client();
    const config = require("./config.json");
    const ytdl = require('ytdl-core');

    var youtube = require('./youtube.js');


    var ytAudioQueue = [];
    var dispatcher = null;

    bot.on('message', function(message) {
       var messageParts = message.content.split(' ');
       var command = messageParts[0].toLowerCase();
       var parameters = messageParts.splice(1, messageParts.length);

       switch (command) {

           case "-join" :
           message.reply("Attempting to join channel " + parameters[0]);
           JoinCommand(parameters[0], message);
           break;
       
           case "-play" :
           PlayCommand(parameters.join(" "), message);
           break;

           case "-playqueue":
           PlayQueueCommand(message);
           break;
       }
    });


       function PlayCommand(searchTerm) {
           if(bot.voiceConnections.array().length == 0) {
               var defaultVoiceChannel = bot.channels.find(val => val.type === 'voice').name;
               JoinCommand(defaultVoiceChannel);
           }
           youtube.search(searchTerm, QueueYtAudioStream);
       }

       function PlayQueueCommand(message) {
           var queueString = "";

           for(var x = 0; x < ytAudioQueue.length; x++) {
               queueString += ytAudioQueue[x].videoName + ", ";
           }
           queueString = queueString.substring(0, queueString.length - 2);
           message.reply(queueString);
       }

       function JoinCommand(ChannelName) {
           var voiceChannel = GetChannelByName(ChannelName);

           if (voiceChannel) {
               voiceChannel.join();
               console.log("Joined " + voiceChannel.name);
           }
           
           return voiceChannel;
           
       }

       /* Helper Methods */

       function GetChannelByName(name) {
           var channel = bot.channels.find(val => val.name === name);
           return channel;
       }

     

       function QueueYtAudioStream(videoId, videoName) {
           var streamUrl = youtube.watchVideoUrl + videoId;

           if (!ytAudioQueue.length) {
               ytAudioQueue.push(
                   {
                       'streamUrl' : streamUrl,
                       'videoName' : videoName
                   }
               );
               console.log('Queued audio ' + videoName);
               PlayStream(ytAudioQueue[0].streamUrl);
           }
           else {
               ytAudioQueue.push(
                   {
                       'streamUrl' : streamUrl,
                       'videoName' : videoName
                   }
               );
           }
           console.log("Queued audio " + videoName);
       }

       function PlayStream(streamUrl) {
           const streamOptions = {seek: 0, volume: 1};

           if (streamUrl) {
               const stream = ytdl(streamUrl, {filter: 'audioonly'});

               if (dispatcher == null) {
                   var voiceConnection = bot.voiceConnections.first();

                   if(voiceConnection) {
                       console.log("Now Playing " + ytAudioQueue[0].videoname);
                       dispatcher = bot.voiceConnections.first().playStream(stream, streamOptions);

                       dispatcher.on('end', () => {
                           dispatcher = null;
                           PlayNextStreamInQueue();
                       });

                       dispatcher.on('error', (err) => {
                           console.log(err);
                       });
                   }
               } else {
                   dispatcher = bot.voiceConnections.first().playStream(stream, streamOptions);
               }
               
           }
       }

       function PlayNextStreamInQueue() {
           ytAudioQueue.splice(0, 1);

           if (ytAudioQueue.length != 0) {
               console.log("now Playing " + ytAudioQueue[0].videoName);
               PlayStream(ytAudioQueue[0].streamUrl);
           }
       }


    bot.login(config.token);

    youtube.js file

    var request = require('superagent');

    const API_KEY = "My API KEY";
    const WATCH_VIDEO_URL = "https://www.youtube.com/watch?v=";

    exports.watchVideoUrl = WATCH_VIDEO_URL;

    exports.search = function search(searchKeywords, callback) {
     var requestUrl = 'https://www.googleapis.com/youtube/v3/search' + '?part=snippet&q=' + escape(searchKeywords) + '&key=' + API_KEY;

     request(requestUrl, (error, response) => {
       if (!error && response.statusCode == 200) {

         var body = response.body;
         if (body.items.length == 0) {
           console.log("I Could Not Find Anything!");
           return;
         }
         for (var item of body.items) {
           if (item.id.kind == 'youtube#video') {
             callback(item.id.videoId, item.snippet.title);
             return;
           }
         }
       } else {
         console.log("Unexpected error!");
         return;
       }
     });

     return;

    };

    Error I am getting when I try to run code :

    Joined General

    C :\Discord Bot\node_modules\discord.js\src\client\voice\pcm\FfmpegConverterEngine.

    js:80

    throw new Error(

    ^

    Error : FFMPEG was not found on your system, so audio cannot be played. Please make
    sure FFMPEG is installed and in your PATH.

  • How do I convert RTSP stream for iOS browser viewing

    6 mars 2017, par humble_coder

    TL ;DR

    I need to convert full RTSP (A/V) stream from Axis IP cameras to be viewed in a fully-contained/not-full-screen div in an iOS browser. Think : "Youtube live stream as viewed from iOS browser". I’ve seen several links that hint at the issue. . .

    . . .but they’re either "incomplete" or out of date.

    The solution must be local and remain behind site firewall (so no external services).

    MORE DETAIL

    I’m currently writing a custom "Axis IP Camera Manager" Vue/Laravel web app for a client. The initial requirements were very simple :

    1. scan network for axis devices and store addresses/info for future use

    2. display grid of MJPEG for selected camera(s).

    The initial requirements were fairly straightforward. Now, though, there are additional requirements :

    1. Record RTSP stream to [seconds] long MP4 streams.

    2. Convert an RTSP stream from AXIS IP CAMERA to something viewable in both desktop and mobile browsers with full A/V.

    I’ve successfully managed #3 by using ffmpeg to capture and store the stream to MP4. However, I’m no video aficionado, and the nature of #4 is still a bit fuzzy to me. Per my understanding I can’t watch RTSP streams in a browser in iOS, but I also can’t stream an "in-process" MP4 over HTTP. I’ve seen references to several items such as Red5, Live555, Wowza, ffserver (discontinued ?), etc. but I’m completely unfamiliar with them. In the short term, I’m looking for a quick "live" conversion solution. In the long term, I’m interested in a deeper understanding of the issue(s) at hand. Any current info/expertise/links/manuals would be appreciated.