Recherche avancée

Médias (1)

Mot : - Tags -/Rennes

Autres articles (41)

  • ANNEXE : Les plugins utilisés spécifiquement pour la ferme

    5 mars 2010, par

    Le site central/maître de la ferme a besoin d’utiliser plusieurs plugins supplémentaires vis à vis des canaux pour son bon fonctionnement. le plugin Gestion de la mutualisation ; le plugin inscription3 pour gérer les inscriptions et les demandes de création d’instance de mutualisation dès l’inscription des utilisateurs ; le plugin verifier qui fournit une API de vérification des champs (utilisé par inscription3) ; le plugin champs extras v2 nécessité par inscription3 (...)

  • 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

  • HTML5 audio and video support

    13 avril 2011, par

    MediaSPIP uses HTML5 video and audio tags to play multimedia files, taking advantage of the latest W3C innovations supported by modern browsers.
    The MediaSPIP player used has been created specifically for MediaSPIP and can be easily adapted to fit in with a specific theme.
    For older browsers the Flowplayer flash fallback is used.
    MediaSPIP allows for media playback on major mobile platforms with the above (...)

Sur d’autres sites (6370)

  • ffplay cannot play more than one song

    5 février 2020, par Bernie gach

    i have taken ffplay.c file from http://ffmpeg.org/doxygen/trunk/ffplay_8c-source.html and re edited it to a cpp file to embed in my win32 gui application . i have made the following changes to it.

    1. made the int main function into a local function as follows, i can pass the HWND to embedd the player
    void Ffplay::play_song(string file, HWND parent, bool* successfull)
    {
       int flags;
       VideoState* is;
       input_filename = file;
       /* register all codecs, demux and protocols */
    #if CONFIG_AVDEVICE
       avdevice_register_all();
    #endif
       //avformat_network_init();
       //check whether the filename is valid
       if (input_filename.empty())
       {
           logger.log(logger.LEVEL_ERROR, "filename %s is not valid\n", file);
           return;
       }
       if (display_disable)
       {
           video_disable = 1;
       }
       flags = SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_TIMER;
       if (audio_disable)
           flags &= ~SDL_INIT_AUDIO;
       else
       {
           /* Try to work around an occasional ALSA buffer underflow issue when the
            * period size is NPOT due to ALSA resampling by forcing the buffer size. */
           if (!SDL_getenv("SDL_AUDIO_ALSA_SET_BUFFER_SIZE"))
               SDL_setenv("SDL_AUDIO_ALSA_SET_BUFFER_SIZE", "1", 1);
       }
       if (display_disable)
           flags &= ~SDL_INIT_VIDEO;
       SDL_SetMainReady();
       if (SDL_Init(flags))
       {
           logger.log(logger.LEVEL_ERROR, "Could not initialize SDL - %s\n", SDL_GetError());
           logger.log(logger.LEVEL_ERROR, "(Did you set the DISPLAY variable?)\n");
           return;
       }
       //Initialize optional fields of a packet with default values.
       //Note, this does not touch the data and size members, which have to be initialized separately.
       av_init_packet(&flush_pkt);
       flush_pkt.data = (uint8_t*)&flush_pkt;

       if (!display_disable)
       {
           int flags = SDL_WINDOW_HIDDEN;
           if (alwaysontop)
    #if SDL_VERSION_ATLEAST(2,0,5)
               flags |= SDL_WINDOW_ALWAYS_ON_TOP;
    #else
               logger.log(logger.LEVEL_INFO, "SDL version doesn't support SDL_WINDOW_ALWAYS_ON_TOP. Feature will be inactive.\n");
    #endif
           if (borderless)
               flags |= SDL_WINDOW_BORDERLESS;
           else
               flags |= SDL_WINDOW_RESIZABLE;
           SDL_InitSubSystem(flags);
           ShowWindow(parent, true);
           //window = SDL_CreateWindow(program_name, SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, default_width, default_height, flags);
           window = SDL_CreateWindowFrom(parent);
           SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, "linear");
           if (window) {
               renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
               if (!renderer)
               {
                   logger.log(logger.LEVEL_ERROR, "Failed to initialize a hardware accelerated renderer: %s\n", SDL_GetError());
                   renderer = SDL_CreateRenderer(window, -1, 0);
               }
               if (renderer)
               {
                   if (!SDL_GetRendererInfo(renderer, &renderer_info))
                   {
                       logger.log(logger.LEVEL_INFO, "Initialized %s renderer.\n", renderer_info.name);
                   }
               }
           }
           if (!window || !renderer || !renderer_info.num_texture_formats)
           {
               logger.log(logger.LEVEL_ERROR, "Failed to create window or renderer: %s\n", SDL_GetError());
               return;
           }
       }

       is = stream_open(input_filename.c_str(), file_iformat);
       if (!is)
       {
           logger.log(logger.LEVEL_ERROR, "Failed to initialize VideoState!\n");
           return;
       }
       //the song is playing now
       *successfull = true;
       event_loop(is);
       //the song has quit;
       *successfull = false;
    }
    1. changed the callback functions as the static ones couldn’t be used by c++ eg,
    void Ffplay::static_sdl_audio_callback(void* opaque, Uint8* stream, int len)
    {
       static_cast(opaque)->sdl_audio_callback(opaque, stream, len);
    }

    closing doesn’t change from the main file to close the audio and sdl framework

    void Ffplay::do_exit(VideoState* is)
    {
       abort = true;
       if(is)
       {
           stream_close(is);
       }
       if (renderer)
           SDL_DestroyRenderer(renderer);
       if (window)
            SDL_DestroyWindow(window);
    #if CONFIG_AVFILTER
       av_freep(&vfilters_list);
    #endif
       avformat_network_deinit();
       SDL_Quit();

    }

    i call the functions as follows from main gui

    ft=std::async(launch::async, &Menu::play_song, this, songs_to_play.at(0));

    the menu::play_song function is :

    void Menu::play_song(wstring song_path)
    {
       ready_to_play_song = false;
       OutputDebugString(L"\nbefore song\n");
       using std::future;
       using std::async;
       using std::launch;

       string input{ song_path.begin(),song_path.end() };
       Ffplay ffplay;
       ffplay.play_song(input, h_sdl_window, &song_opened);

       OutputDebugString(L"\nafter song\n");
       ready_to_play_song = true;
    }

    THE PROBLEM is i can only play one song . if i call the menu::play_song function again the sound is missing and the video/art cover is occasionally missing also. it seems some resources are not been released or something like that.

    i have localised the proble to this function

    int Ffplay::packet_queue_get(PacketQueue* q, AVPacket* pkt, int block, int* serial)
    {

       MyAVPacketList* pkt1;
       int ret;
       int count=0;
       SDL_LockMutex(q->mutex);

       for (;;)
       {


           if (q->abort_request)
           {
               ret = -1;
               break;
           }

           pkt1 = q->first_pkt;
           if (pkt1) {
               q->first_pkt = pkt1->next;
               if (!q->first_pkt)
                   q->last_pkt = NULL;
               q->nb_packets--;
               q->size -= pkt1->pkt.size + sizeof(*pkt1);
               q->duration -= pkt1->pkt.duration;
               *pkt = pkt1->pkt;
               if (serial)
                   *serial = pkt1->serial;
               av_free(pkt1);
               ret = 1;
               break;
           }
           else if (!block) {
               ret = 0;
               break;
           }
           else
           {
               logger.log(logger.LEVEL_INFO, "packet_queue before");
               SDL_CondWait(q->cond, q->mutex);
               logger.log(logger.LEVEL_INFO, "packet_queue after");

           }
       }
       SDL_UnlockMutex(q->mutex);
       return ret;
    }

    the call to SDL_CondWait(q->cond, q->mutex); never returns

  • Discord.py : Access files on the computer of the person who sent a message. Play a song from the local drive of any user on the server

    7 avril 2021, par daDib

    I have a bot that can play music from my computer. Is there a way to play a song from the computer of the person who sent the message ? My thought would be using message.author to somehow access the person's session and get into their drive. Here is my bot. It can join a voice channel, create playlists from local file paths, start a playlist or individual file with stop/pause/play/next/previous controls :

    


    import discord
import os.path
import logging
import asyncio
from os import path

global ready 
global vc
global source
global songQueue
global songIndex
global commandList
global stopPlaylist

ready = False
stopPlaylist = False
songQueue = []
songIndex = 0

logger = logging.getLogger('discord')
logger.setLevel(logging.DEBUG)
handler = logging.FileHandler(filename='D:\DnD\DiscordBot\discord.log', encoding='utf-8', mode='w')
handler.setFormatter(logging.Formatter('%(asctime)s:%(levelname)s:%(name)s: %(message)s'))
logger.addHandler(handler)

client = discord.Client()
commands = [
    '!connect\nConnect to a voice channel by channel id. Use !channels to find the desired id.\nExample Command: !connect 827202170973323305\n\n',
    '!channels\nLists all voice channels and their connection id.\n\n',
    '!add\nAdd a file path to the playlist.\nExample Command: !add D:\\DnD\\DiscordBot\\mySong.mp3\n\n',
    '!delete\nDeletes the last song added to the playlist.\n\n',
    '!view\nDisplays the current playlist, in order.\n\n',
    '!playlist\nStarts the playlist from the beginning, or optionally add a number as the start position.\nExample Command: !playlist 3\n\n',
    '!playSong\nPlays a specified file.\nExample Command: !playSong D:\\DnD\\DiscordBot\\mySong.mp3\n\n',
    '!next\nPlays next song in playlist.\n\n',
    '!prev\nPlays previous song in playlist.\n\n',
    '!stop\nStops all music song. Playlist will restart from the beginning.\n\n',
    '!pause\nPauses the current song. Restart with !resumeSong.\n\n',
    '!resume\nResumes the current song.\n\n'
    '!status\nLets you know if the bot thinks it is playing music.'
    ]
commandList=''
for command in commands:
    commandList+=command

@client.event
async def on_ready():
    print('We have logged in as {0.user}'.format(client))

@client.event
async def on_message(message):
    global ready 
    global vc
    global source
    global songQueue
    global songIndex
    global commandList
    global stopPlaylist

    if message.author == client.user:
        return
#!help
    if message.content.startswith('!help'):
        await message.channel.send('{0}'.format(commandList))
        return
#!connect
    if message.content.startswith('!connect'):  
        if ready:
            await message.channel.send('Bot [{0}] is already connected to a voice channel.'.format(client.user))
            return
        channel = int(message.content[9:])
        vc = await client.get_channel(channel).connect()
        ready = True
        await message.channel.send('Bot [{0}] is connecting to voice.'.format(client.user))
        return
#!channels
    if message.content.startswith('!channels'):
        channelList = ''
        for channel in client.get_all_channels():
            if channel.type == discord.ChannelType.voice:
                channelList += 'name: ' + channel.name + '\n'
                channelList += 'id: ' + str(channel.id) + '\n\n'
        await message.channel.send('{0}'.format(channelList))
        return
#!add
    if message.content.startswith('!add'):
        song = message.content[5:]
        if not path.exists(song):
            await message.channel.send('Song not found or invalid path specified.\nSpecified Path: {0}\nExample command: !addSong C:\\Users\\Public\\Music\\mySong.mp3'.format(song))
            return
        songQueue.append(song)
        await message.channel.send('Song added: {0}\nCurrent playist length: {1} song(s)'.format(song,len(songQueue)))
        return
#!delete
    if message.content.startswith('!delete'):
        if len(songQueue) == 0:
            await message.channel.send('Playlist is empty. Use !addSong, !viewList, and !playList to manage playlists.')
            return
        await message.channel.send('Removed song: {0}'.format(songQueue.pop()))
        return
#!view
    if message.content.startswith('!view'):
        if len(songQueue) == 0:
            await message.channel.send('Playlist is empty. Use !addSong, !deleteSong, and !playList to manage playlists.')
            return
        await message.channel.send('Current Playlist:\n{0}'.format('\n'.join(songQueue)))
        return
#play commands
    if message.content.startswith('!play'):
        if not ready:
            await message.channel.send('Bot [{0}] is not connected to a voice channel.'.format(client.user))
            return
#!playlist  
        if message.content.startswith('!playlist'):
            try:
                songIndex = int(message.content[10:]) - 1
                if songIndex >= len(songQueue):
                    songIndex = len(songQueue) - 1
            except:
                pass    
            playSong()
            return
#!playSong
        if message.content.startswith('!playSong'):
            song = message.content[10:]
            if not path.exists(song):
                await message.channel.send('Song not found or invalid path specified.\nSpecified Path: {0}\nExample command: !play C:\\Users\\Public\\Music\\mySong.mp3'.format(song))
                return
            source = discord.FFmpegPCMAudio(song)
            vc.play(source, after=None)
            await message.channel.send('Playing song: {0}'.format(song))
            return
#!next
    if message.content.startswith('!next'):
        vc.stop()
#!prev
    if message.content.startswith('!prev'):
        songIndex -= 2
        if songIndex < -1:
            songIndex = -1
        vc.stop()
#!stop
    if message.content.startswith('!stop'):
        if not ready:
            await message.channel.send('Bot [{0}] is not connected to a voice channel.'.format(client.user))
            return
        vc.stop()
        songIndex = 0
        stopPlaylist = True
        await message.channel.send('Stopping music.')
        return
#!pause
    if message.content.startswith('!pause'):
        if not ready:
            await message.channel.send('Bot [{0}] is not connected to a voice channel.'.format(client.user))
            return
        vc.pause()
        await message.channel.send('Pausing music.')
        return
#!resume
    if message.content.startswith('!resume'):
        if not ready:
            await message.channel.send('Bot [{0}] is not connected to a voice channel.'.format(client.user))
            return
        vc.resume()
        await message.channel.send('Resuming music.')
        return
#!status
    if message.content.startswith('!status'):
        if not ready:
            await message.channel.send('Bot [{0}] is not connected to a voice channel.'.format(client.user))
            return
        if vc.is_playing():
            await message.channel.send('Something is playing.')
            return
        await message.channel.send('Nothing is playing.')
        return

def playSong():
    global songQueue
    global songIndex
    global vc
    try:
        song = songQueue[songIndex]
        source = discord.FFmpegPCMAudio(song)
        vc.play(source, after=nextSong)
    except Exception as e:
        print('playSong error {0}'.format(e))

def nextSong(error):
    global songQueue
    global songIndex
    global stopPlaylist
    try:
        songIndex += 1
        if songIndex >= len(songQueue):
            stopPlaylist = True
        if stopPlaylist:
            songIndex = 0
            stopPlaylist = False
            return
        futureFunction = asyncio.run_coroutine_threadsafe(playSong(), client.loop)
        futureFunction.result()
    except Exception as e:
        print('nextSong error {0}'.format(e))

#@client.event
#async def on_logout(user)
#   global ready
#   if user == client.user:
#       ready = False

client.run('TOKEN')


    


  • How to add a scrolling text of the audio file song name on a sepecific part of a video and stream it to youtube using ffmpeg

    5 novembre 2022, par Youssef Lasheen

    I know this is s very long and specific question but it can be broken down to these points :

    


      

    • How to add a text of song name on video
    • 


    • How to scroll in a specific area not from the beginning of the video to the end
    • 


    • How to stream a looping video and loop through multiple audio files to youtube/twitch.
    • 


    


    I kinda got the third point but i think its not an elegant solution

    


    ffmpeg -re -stream_loop -1 -i back.gif -safe 0 -i mylist.txt -c copy -map 0:v:0 -map 1:a:0 -c:v libx264 -preset veryfast -b:v 3000k -maxrate 3000k \ -bufsize 6000k -pix_fmt yuv420p -g 50 -c:a aac -b:a 160k -ac 2 \ -ar 44100  -f flv rtmp://live.twitch.tv/app/$key

    


    I also found this script that adds a scrolling image (input.jpg) to specific aree of a video but i coudlnt integrate it with the script above

    


    ffmpeg -y -ignore_loop 0 -r 25 -i back.gif -loop 1 -r 25 -i input.jpg -filter_complex "[0:v]crop=270:257:360:55[c0];[c0][1:v]overlay=y='257-t*257*0.04':eof_action=endall[fg];[0:v][fg]overlay=x=360:y=55:eof_action=endall" -t 50 output.mp4