Recherche avancée

Médias (1)

Mot : - Tags -/copyleft

Autres articles (96)

  • MediaSPIP 0.1 Beta version

    25 avril 2011, par

    MediaSPIP 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 (...)

  • 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 (...)

  • 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 (...)

Sur d’autres sites (8046)

  • discord.ext.commands.errors.CommandInvokeError : Command raised an exception : ClientException : ffmpeg was not found

    22 juillet 2022, par MST

    I made a music bot on Replit but, when running my code I get this error :
discord.ext.commands.errors.CommandInvokeError : Command raised an exception : ClientException : ffmpeg was not found.

    


    Can someone help me fix this ?

    


    main.py

    


    import discord
from discord.ext import commands
import music

cogs = [music]

client = commands.Bot(command_prefix='!', intents = discord.Intents.all())

for i in range(len(cogs)):
  cogs[i].setup(client)


client.run("token")


    


    music.py

    


    import discord
from discord.ext import commands
import youtube_dl
import ffmpeg

class music(commands.Cog):
  def __init__(self,client):
    self.client = client

  @commands.command(name="join")
  async def join(self,ctx):
    if ctx.author.voice is None:
      await ctx.send("You are not in a Voice Channel!")
    voice_channel = ctx.author.voice.channel
    if ctx.voice_client is None:
      await voice_channel.connect()
    else:
      await ctx.voice_client.move_to(voice_channel)

  @commands.command(name="disconnect")
  async def disconnect(self,ctx):
    await ctx.voice_client.disconnect()

  @commands.command(name="play")
  async def play(self,ctx,url):
    ctx.voice_client.stop()
    FFMPEG_OPTIONS = {'before_options': '-reconnect 1 -reconnect_streamed 1 -reconnect_delay_max 5', 'options': '-vn'}
    YDL_OPTIONS = {'format':"bestaudio"}
    vc = ctx.voice_client

    with youtube_dl.YoutubeDL(YDL_OPTIONS) as ydl:
      info = ydl.extract_info(url, download=False)
      url2 = info['formats'][0]['url']
      source = await discord.FFmpegOpusAudio.from_probe(url2,**FFMPEG_OPTIONS)
      vc.play(source)


  @commands.command(name="pause")
  async def pause(self,ctx):
    await ctx.voice_client.pause()
    await ctx.send("Paused Playing Music!")

  @commands.command(name="resume")
  async def resume(self,ctx):
    await ctx.voice_client.resume()
    await ctx.send("Resumed Playing Music!")

def setup(client):
  client.add_cog(music(client))


    


    So, The bot is able to join the Voice Channel but when I ask it to play a song, it gives this error :

    


    [youtube] Pkh8UtuejGw: Downloading webpage
[youtube] Pkh8UtuejGw: Downloading player afeb58ff
Ignoring exception in command play:
Traceback (most recent call last):
  File "/home/runner/DiscordMusicBotTest/venv/lib/python3.8/site-packages/discord/ext/commands/core.py", line 85, in wrapped
    ret = await coro(*args, **kwargs)
  File "/home/runner/DiscordMusicBotTest/music.py", line 34, in play
    source = await discord.FFmpegOpusAudio.from_probe(url2,**FFMPEG_OPTIONS)
  File "/home/runner/DiscordMusicBotTest/venv/lib/python3.8/site-packages/discord/player.py", line 387, in from_probe
    return cls(source, bitrate=bitrate, codec=codec, **kwargs)
  File "/home/runner/DiscordMusicBotTest/venv/lib/python3.8/site-packages/discord/player.py", line 324, in __init__
    super().__init__(source, executable=executable, args=args, **subprocess_kwargs)
  File "/home/runner/DiscordMusicBotTest/venv/lib/python3.8/site-packages/discord/player.py", line 138, in __init__
    self._process = self._spawn_process(args, **kwargs)
  File "/home/runner/DiscordMusicBotTest/venv/lib/python3.8/site-packages/discord/player.py", line 147, in _spawn_process
    raise ClientException(executable + ' was not found.') from None
discord.errors.ClientException: ffmpeg was not found.

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/runner/DiscordMusicBotTest/venv/lib/python3.8/site-packages/discord/ext/commands/bot.py", line 939, in invoke
    await ctx.command.invoke(ctx)
  File "/home/runner/DiscordMusicBotTest/venv/lib/python3.8/site-packages/discord/ext/commands/core.py", line 863, in invoke
    await injected(*ctx.args, **ctx.kwargs)
  File "/home/runner/DiscordMusicBotTest/venv/lib/python3.8/site-packages/discord/ext/commands/core.py", line 94, in wrapped
    raise CommandInvokeError(exc) from exc
discord.ext.commands.errors.CommandInvokeError: Command raised an exception: ClientException: ffmpeg was not found.


    


  • FFMPEG audio conversion is taking too much time

    26 octobre 2018, par Sachin Varma

    How to make the audio conversion ultrafast ?

    It is now taking more than 2 minutes for converting an audio around 2mb in size.

    The command i’m using for execution of conversion is

    String[] cmd = {"-y", "-i", audioPath, outputPath};

    How to preset the ultrafast mode ?

    While i’m trying it like

    String[] cmd = {"-y", "-i", audioPath,"-preset", "ultrafast" ,outputPath};

    It is taking same time itself.

    Using the library https://github.com/WritingMinds/ffmpeg-android-java

    Log :

    D : ffmpeg version n3.0.1 Copyright (c) 2000-2016 the FFmpeg developers
    D : built with gcc 4.8 (GCC) D : configuration : —target-os=linux
    —cross-prefix=/home/vagrant/SourceCode/ffmpeg-android/toolchain-android/bin/arm-linux-androideabi-
    —arch=arm —cpu=cortex-a8 —enable-runtime-cpudetect —sysroot=/home/vagrant/SourceCode/ffmpeg-android/toolchain-android/sysroot
    —enable-pic —enable-libx264 —enable-libass —enable-libfreetype —enable-libfribidi —enable-libmp3lame —enable-fontconfig —enable-pthreads —disable-debug —disable-ffserver —enable-version3 —enable-hardcoded-tables —disable-ffplay —disable-ffprobe —enable-gpl —enable-yasm —disable-doc —disable-shared —enable-static —pkg-config=/home/vagrant/SourceCode/ffmpeg-android/ffmpeg-pkg-config —prefix=/home/vagrant/SourceCode/ffmpeg-android/build/armeabi-v7a —extra-cflags=’-I/home/vagrant/SourceCode/ffmpeg-android/toolchain-android/include
    -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fno-strict-overflow -fstack-protector-all’ —extra-ldflags=’-L/home/vagrant/SourceCode/ffmpeg-android/toolchain-android/lib
    -Wl,-z,relro -Wl,-z,now -pie’ —extra-libs=’-lpng -lexpat -lm’ —extra-cxxflags= D : libavutil 55. 17.103 / 55. 17.103 D : libavcodec 57. 24.102 / 57. 24.102 D : libavformat 57. 25.100
    / 57. 25.100 D : libavdevice 57. 0.101 / 57. 0.101 D :
    libavfilter 6. 31.100 / 6. 31.100 D : libswscale 4. 0.100
    / 4. 0.100 D : libswresample 2. 0.101 / 2. 0.101 D :
    libpostproc 54. 0.100 / 54. 0.100 D : [mp3 @ 0xf2a25000] Skipping
    0 bytes of junk at 33. D : [mp3 @ 0xf2a25000] Estimating duration from
    bitrate, this may be inaccurate D : Input #0, mp3, from
    ’/storage/emulated/0/Bluetooth1/Aluva Puzha Song with Lyrics Premam
    Malayalam Movie Song 2015 ft Nivin Pauly.mp3’ : D : Metadata : D :
    encoder : Lavf52.64.2 D : Duration : 00:03:03.28, start :
    0.000000, bitrate : 128 kb/s D : Stream #0:0 : Audio : mp3, 44100 Hz, stereo, s16p, 128 kb/s D : Codec AVOption preset (Set the encoding
    preset (cf. x264 —fullhelp)) specified for output file #0
    (/storage/emulated/0/SACLO.m4a) has not been used for any stream. The
    most likely reason is either wrong type (e.g. a video option with no
    video streams) or that it is a private option of some encoder which
    was not actually used for any stream. D : Output #0, ipod, to
    ’/storage/emulated/0/SACLO.m4a’ : D : Metadata : D : encoder
     : Lavf57.25.100 D : Stream #0:0 : Audio : aac (LC) (mp4a /
    0x6134706D), 44100 Hz, stereo, fltp, 128 kb/s D : Metadata : D :
    encoder : Lavc57.24.102 aac D : Stream mapping : D : Stream

    0:0 -> #0:0 (mp3 (native) -> aac (native)) D : Press [q] to stop, [?] for help D : size= 6kB time=00:00:01.78 bitrate= 25.6kbits/s

    speed=3.54x D : size= 18kB time=00:00:02.53 bitrate=
    57.1kbits/s speed=2.51x D : size= 30kB time=00:00:03.32 bitrate= 74.1kbits/s speed=2.18x D : size= 42kB
    time=00:00:04.08 bitrate= 84.9kbits/s speed=2.02x D : size=
    50kB time=00:00:04.57 bitrate= 89.5kbits/s speed=1.81x D : size=
    61kB time=00:00:05.27 bitrate= 95.4kbits/s speed=1.73x D : size=
    70kB time=00:00:05.82 bitrate= 98.6kbits/s speed=1.64x D : size=
    80kB time=00:00:06.45 bitrate= 101.4kbits/s speed=1.59x D : size=
    91kB time=00:00:07.17 bitrate= 104.4kbits/s speed=1.57x D : size=
    103kB time=00:00:07.91 bitrate= 106.8kbits/s speed=1.56x D : size=
    115kB time=00:00:08.68 bitrate= 108.9kbits/s speed=1.56x D : size=
    128kB time=00:00:09.49 bitrate= 110.7kbits/s speed=1.56x D : size=
    137kB time=00:00:10.05 bitrate= 111.6kbits/s speed=1.52x D : size=
    151kB time=00:00:10.91 bitrate= 113.0kbits/s speed=1.53x D : size=
    160kB time=00:00:11.47 bitrate= 113.9kbits/s speed=1.51x D : size=
    170kB time=00:00:12.14 bitrate= 114.9kbits/s speed= 1.5x D : size=
    184kB time=00:00:12.97 bitrate= 115.8kbits/s speed= 1.5x D : size=
    196kB time=00:00:13.79 bitrate= 116.6kbits/s speed=1.51x D : size=
    209kB time=00:00:14.62 bitrate= 117.3kbits/s speed=1.52x D : size=
    222kB time=00:00:15.44 bitrate= 118.0kbits/s speed=1.52x D : size=
    235kB time=00:00:16.20 bitrate= 118.5kbits/s speed=1.52x D : size=
    247kB time=00:00:16.99 bitrate= 119.0kbits/s speed=1.52x D : size=
    256kB time=00:00:17.60 bitrate= 119.4kbits/s speed=1.51x D : size=
    266kB time=00:00:18.18 bitrate= 119.7kbits/s speed=1.49x D : size=
    276kB time=00:00:18.85 bitrate= 120.0kbits/s speed=1.48x D : size=
    287kB time=00:00:19.55 bitrate= 120.3kbits/s speed=1.48x D : size=
    301kB time=00:00:20.43 bitrate= 120.6kbits/s speed=1.49x D : size=
    314kB time=00:00:21.29 bitrate= 120.9kbits/s speed= 1.5x D : size=
    327kB time=00:00:22.12 bitrate= 121.2kbits/s speed= 1.5x D : size=
    340kB time=00:00:22.96 bitrate= 121.4kbits/s speed=1.51x D : size=
    354kB time=00:00:23.80 bitrate= 121.7kbits/s speed=1.51x D : size=
    367kB time=00:00:24.63 bitrate= 122.0kbits/s speed=1.51x D : size=
    379kB time=00:00:25.37 bitrate= 122.2kbits/s speed=1.51x D : size=
    388kB time=00:00:26.00 bitrate= 122.4kbits/s speed= 1.5x D : size=
    400kB time=00:00:26.74 bitrate= 122.5kbits/s speed= 1.5x D : size=
    411kB time=00:00:27.44 bitrate= 122.8kbits/s speed= 1.5x D : size=
    424kB time=00:00:28.25 bitrate= 123.0kbits/s speed= 1.5x D : size=
    437kB time=00:00:29.07 bitrate= 123.2kbits/s speed= 1.5x D : size=
    450kB time=00:00:29.86 bitrate= 123.4kbits/s speed= 1.5x D : size=
    463kB time=00:00:30.69 bitrate= 123.5kbits/s speed= 1.5x D : size=
    472kB time=00:00:31.30 bitrate= 123.6kbits/s speed= 1.5x D : size=
    484kB time=00:00:32.02 bitrate= 123.8kbits/s speed= 1.5x D : size=
    497kB time=00:00:32.85 bitrate= 123.9kbits/s speed= 1.5x D : size=
    511kB time=00:00:33.71 bitrate= 124.1kbits/s speed= 1.5x D : size=
    524kB time=00:00:34.55 bitrate= 124.2kbits/s speed=1.51x D : size=
    537kB time=00:00:35.38 bitrate= 124.3kbits/s speed=1.51x D : size=
    547kB time=00:00:36.06 bitrate= 124.4kbits/s speed=1.51x D : size=
    558kB time=00:00:36.73 bitrate= 124.4kbits/s speed= 1.5x D : size=
    570kB time=00:00:37.50 bitrate= 124.5kbits/s speed= 1.5x D : size=
    583kB time=00:00:38.31 bitrate= 124.6kbits/s speed= 1.5x D : size=
    593kB time=00:00:38.93 bitrate= 124.6kbits/s speed= 1.5x D : size=
    604kB time=00:00:39.65 bitrate= 124.7kbits/s speed= 1.5x D : size=
    617kB time=00:00:40.49 bitrate= 124.8kbits/s speed= 1.5x D : size=
    630kB time=00:00:41.33 bitrate= 124.9kbits/s speed= 1.5x D : size=
    643kB time=00:00:42.12 bitrate= 125.0kbits/s speed= 1.5x D : size=
    656kB time=00:00:42.95 bitrate= 125.0kbits/s speed=1.51x D : size=
    666kB time=00:00:43.58 bitrate= 125.2kbits/s speed= 1.5x D : size=
    679kB time=00:00:44.41 bitrate= 125.3kbits/s speed= 1.5x D : size=
    692kB time=00:00:45.23 bitrate= 125.3kbits/s speed=1.51x D : size=
    704kB time=00:00:45.97 bitrate= 125.4kbits/s speed=1.51x D : size=
    717kB time=00:00:46.78 bitrate= 125.5kbits/s speed=1.51x D : size=
    731kB time=00:00:47.69 bitrate= 125.6kbits/s speed=1.51x D : size=
    743kB time=00:00:48.43 bitrate= 125.6kbits/s speed=1.51x D : size=
    753kB time=00:00:49.06 bitrate= 125.7kbits/s speed=1.51x D : size=
    766kB time=00:00:49.92 bitrate= 125.7kbits/s speed=1.51x D : size=
    782kB time=00:00:50.94 bitrate= 125.8kbits/s speed=1.52x D : size=
    796kB time=00:00:51.85 bitrate= 125.8kbits/s speed=1.52x D : size=
    810kB time=00:00:52.68 bitrate= 125.9kbits/s speed=1.52x D : size=
    823kB time=00:00:53.52 bitrate= 125.9kbits/s speed=1.52x D : size=
    835kB time=00:00:54.31 bitrate= 126.0kbits/s speed=1.52x D : size=
    848kB time=00:00:55.12 bitrate= 126.0kbits/s speed=1.53x D : size=
    861kB time=00:00:55.96 bitrate= 126.1kbits/s speed=1.53x D : size=
    874kB time=00:00:56.74 bitrate= 126.1kbits/s speed=1.53x D : size=
    887kB time=00:00:57.58 bitrate= 126.2kbits/s speed=1.53x D : size=
    900kB time=00:00:58.39 bitrate= 126.2kbits/s speed=1.53x D : size=
    913kB time=00:00:59.23 bitrate= 126.2kbits/s speed=1.53x D : size=
    926kB time=00:01:00.07 bitrate= 126.3kbits/s speed=1.53x D : size=
    939kB time=00:01:00.90 bitrate= 126.3kbits/s speed=1.53x D : size=
    952kB time=00:01:01.74 bitrate= 126.3kbits/s speed=1.54x D : size=
    965kB time=00:01:02.57 bitrate= 126.4kbits/s speed=1.54x D : size=
    978kB time=00:01:03.41 bitrate= 126.4kbits/s speed=1.54x D : size=
    992kB time=00:01:04.27 bitrate= 126.4kbits/s speed=1.54x D : size=
    1005kB time=00:01:05.10 bitrate= 126.4kbits/s speed=1.54x D : size=
    1018kB time=00:01:05.94 bitrate= 126.5kbits/s speed=1.54x D : size=
    1031kB time=00:01:06.78 bitrate= 126.5kbits/s speed=1.54x D : size=
    1044kB time=00:01:07.61 bitrate= 126.5kbits/s speed=1.55x D : size=
    1058kB time=00:01:08.45 bitrate= 126.6kbits/s speed=1.55x D : size=
    1071kB time=00:01:09.33 bitrate= 126.6kbits/s speed=1.55x D : size=
    1085kB time=00:01:10.17 bitrate= 126.6kbits/s speed=1.55x D : size=
    1098kB time=00:01:11.00 bitrate= 126.6kbits/s speed=1.55x D : size=
    1110kB time=00:01:11.79 bitrate= 126.7kbits/s speed=1.55x D : size=
    1123kB time=00:01:12.63 bitrate= 126.7kbits/s speed=1.55x D : size=
    1135kB time=00:01:13.37 bitrate= 126.7kbits/s speed=1.55x D : size=
    1149kB time=00:01:14.23 bitrate= 126.8kbits/s speed=1.55x D : size=
    1161kB time=00:01:15.04 bitrate= 126.8kbits/s speed=1.55x D : size=
    1175kB time=00:01:15.88 bitrate= 126.8kbits/s speed=1.55x D : size=
    1188kB time=00:01:16.71 bitrate= 126.8kbits/s speed=1.56x D : size=
    1201kB time=00:01:17.53 bitrate= 126.9kbits/s speed=1.56x D : size=
    1214kB time=00:01:18.36 bitrate= 126.9kbits/s speed=1.56x D : size=
    1225kB time=00:01:19.04 bitrate= 126.9kbits/s speed=1.55x D : size=
    1238kB time=00:01:19.87 bitrate= 127.0kbits/s speed=1.56x D : size=
    1251kB time=00:01:20.68 bitrate= 127.0kbits/s speed=1.56x D : size=
    1264kB time=00:01:21.52 bitrate= 127.0kbits/s speed=1.56x D : size=
    1276kB time=00:01:22.29 bitrate= 127.1kbits/s speed=1.56x D : size=
    1287kB time=00:01:22.94 bitrate= 127.1kbits/s speed=1.55x D : size=
    1298kB time=00:01:23.66 bitrate= 127.1kbits/s speed=1.54x D : size=
    1308kB time=00:01:24.26 bitrate= 127.1kbits/s speed=1.54x D : size=
    1321kB time=00:01:25.10 bitrate= 127.1kbits/s speed=1.54x D : size=
    1333kB time=00:01:25.91 bitrate= 127.1kbits/s speed=1.54x D : size=
    1345kB time=00:01:26.63 bitrate= 127.2kbits/s speed=1.54x D : size=
    1358kB time=00:01:27.39 bitrate= 127.3kbits/s speed=1.54x D : size=
    1370kB time=00:01:28.14 bitrate= 127.3kbits/s speed=1.54x D : size=
    1380kB time=00:01:28.76 bitrate= 127.3kbits/s speed=1.54x D : size=
    1388kB time=00:01:29.28 bitrate= 127.3kbits/s speed=1.53x D : size=
    1401kB time=00:01:30.11 bitrate= 127.4kbits/s speed=1.53x D : size=
    1408kB time=00:01:30.51 bitrate= 127.4kbits/s speed=1.53x D : size=
    1420kB time=00:01:31.32 bitrate= 127.4kbits/s speed=1.53x D : size=
    1432kB time=00:01:32.04 bitrate= 127.5kbits/s speed=1.53x D : size=
    1442kB time=00:01:32.67 bitrate= 127.5kbits/s speed=1.52x D : size=
    1455kB time=00:01:33.50 bitrate= 127.5kbits/s speed=1.53x D : size=
    1467kB time=00:01:34.24 bitrate= 127.5kbits/s speed=1.53x D : size=
    1480kB time=00:01:35.06 bitrate= 127.6kbits/s speed=1.53x D : size=
    1489kB time=00:01:35.57 bitrate= 127.6kbits/s speed=1.52x D : size=
    1499kB time=00:01:36.24 bitrate= 127.6kbits/s speed=1.52x D : size=
    1513kB time=00:01:37.05 bitrate= 127.7kbits/s speed=1.52x D : size=
    1527kB time=00:01:37.91 bitrate= 127.7kbits/s speed=1.52x D : size=
    1541kB time=00:01:38.80 bitrate= 127.7kbits/s speed=1.52x D : size=
    1554kB time=00:01:39.66 bitrate= 127.7kbits/s speed=1.52x D : size=
    1567kB time=00:01:40.51 bitrate= 127.7kbits/s speed=1.53x D : size=
    1580kB time=00:01:41.33 bitrate= 127.8kbits/s speed=1.53x D : size=
    1594kB time=00:01:42.19 bitrate= 127.8kbits/s speed=1.53x D : size=
    1607kB time=00:01:43.00 bitrate= 127.8kbits/s speed=1.53x D : size=
    1620kB time=00:01:43.83 bitrate= 127.8kbits/s speed=1.53x D : size=
    1633kB time=00:01:44.67 bitrate= 127.8kbits/s speed=1.53x D : size=
    1646kB time=00:01:45.53 bitrate= 127.8kbits/s speed=1.53x D : size=
    1659kB time=00:01:46.34 bitrate= 127.8kbits/s speed=1.53x D : size=
    1673kB time=00:01:47.18 bitrate= 127.8kbits/s speed=1.53x D : size=
    1686kB time=00:01:48.01 bitrate= 127.8kbits/s speed=1.53x D : size=
    1699kB time=00:01:48.85 bitrate= 127.8kbits/s speed=1.53x D : size=
    1712kB time=00:01:49.69 bitrate= 127.9kbits/s speed=1.53x D : size=
    1726kB time=00:01:50.57 bitrate= 127.9kbits/s speed=1.53x D : size=
    1740kB time=00:01:51.43 bitrate= 127.9kbits/s speed=1.54x D : size=
    1751kB time=00:01:52.12 bitrate= 127.9kbits/s speed=1.53x D : size=
    1764kB time=00:01:52.94 bitrate= 127.9kbits/s speed=1.54x D : size=
    1778kB time=00:01:53.87 bitrate= 127.9kbits/s speed=1.54x D : size=
    1790kB time=00:01:54.59 bitrate= 128.0kbits/s speed=1.54x D : size=
    1803kB time=00:01:55.40 bitrate= 128.0kbits/s speed=1.54x D : size=
    1816kB time=00:01:56.26 bitrate= 128.0kbits/s speed=1.54x D : size=
    1829kB time=00:01:57.07 bitrate= 128.0kbits/s speed=1.54x D : size=
    1842kB time=00:01:57.88 bitrate= 128.0kbits/s speed=1.54x D : size=
    1855kB time=00:01:58.70 bitrate= 128.0kbits/s speed=1.54x D : size=
    1866kB time=00:01:59.44 bitrate= 128.0kbits/s speed=1.54x D : size=
    1879kB time=00:02:00.27 bitrate= 128.0kbits/s speed=1.54x D : size=
    1892kB time=00:02:01.09 bitrate= 128.0kbits/s speed=1.54x D : size=
    1906kB time=00:02:01.92 bitrate= 128.0kbits/s speed=1.54x D : size=
    1918kB time=00:02:02.74 bitrate= 128.0kbits/s speed=1.54x D : size=
    1931kB time=00:02:03.57 bitrate= 128.0kbits/s speed=1.54x D : size=
    1945kB time=00:02:04.41 bitrate= 128.0kbits/s speed=1.54x D : size=
    1958kB time=00:02:05.22 bitrate= 128.1kbits/s speed=1.54x D : size=
    1971kB time=00:02:06.06 bitrate= 128.1kbits/s speed=1.54x D : size=
    1984kB time=00:02:06.87 bitrate= 128.1kbits/s speed=1.54x D : size=
    1995kB time=00:02:07.59 bitrate= 128.1kbits/s speed=1.54x D : size=
    2008kB time=00:02:08.42 bitrate= 128.1kbits/s speed=1.54x D : size=
    2022kB time=00:02:09.31 bitrate= 128.1kbits/s speed=1.54x D : size=
    2035kB time=00:02:10.14 bitrate= 128.1kbits/s speed=1.54x D : size=
    2048kB time=00:02:10.93 bitrate= 128.1kbits/s speed=1.55x D : size=
    2061kB time=00:02:11.75 bitrate= 128.1kbits/s speed=1.55x D : size=
    2074kB time=00:02:12.56 bitrate= 128.1kbits/s speed=1.55x D : size=
    2087kB time=00:02:13.39 bitrate= 128.1kbits/s speed=1.55x D : size=
    2100kB time=00:02:14.21 bitrate= 128.2kbits/s speed=1.55x D : size=
    2112kB time=00:02:15.00 bitrate= 128.2kbits/s speed=1.55x D : size=
    2125kB time=00:02:15.81 bitrate= 128.2kbits/s speed=1.55x D : size=
    2137kB time=00:02:16.53 bitrate= 128.2kbits/s speed=1.55x D : size=
    2150kB time=00:02:17.34 bitrate= 128.2kbits/s speed=1.55x D : size=
    2163kB time=00:02:18.18 bitrate= 128.2kbits/s speed=1.55x D : size=
    2175kB time=00:02:18.99 bitrate= 128.2kbits/s speed=1.55x D : size=
    2188kB time=00:02:19.80 bitrate= 128.2kbits/s speed=1.55x D : size=
    2200kB time=00:02:20.55 bitrate= 128.2kbits/s speed=1.55x D : size=
    2211kB time=00:02:21.17 bitrate= 128.3kbits/s speed=1.55x D : size=
    2221kB time=00:02:21.78 bitrate= 128.3kbits/s speed=1.54x D : size=
    2232kB time=00:02:22.52 bitrate= 128.3kbits/s speed=1.54x D : size=
    2246kB time=00:02:23.36 bitrate= 128.3kbits/s speed=1.54x D : size=
    2258kB time=00:02:24.10 bitrate= 128.3kbits/s speed=1.54x D : size=
    2270kB time=00:02:24.84 bitrate= 128.4kbits/s speed=1.54x D : size=
    2279kB time=00:02:25.42 bitrate= 128.4kbits/s speed=1.54x D : size=
    2288kB time=00:02:25.98 bitrate= 128.4kbits/s speed=1.54x D : size=
    2300kB time=00:02:26.72 bitrate= 128.4kbits/s speed=1.54x D : size=
    2308kB time=00:02:27.23 bitrate= 128.4kbits/s speed=1.53x D : size=
    2317kB time=00:02:27.77 bitrate= 128.5kbits/s speed=1.53x D : size=
    2327kB time=00:02:28.35 bitrate= 128.5kbits/s speed=1.53x D : size=
    2334kB time=00:02:28.77 bitrate= 128.5kbits/s speed=1.52x D : size=
    2342kB time=00:02:29.30 bitrate= 128.5kbits/s speed=1.52x D : size=
    2355kB time=00:02:30.11 bitrate= 128.5kbits/s speed=1.52x D : size=
    2364kB time=00:02:30.67 bitrate= 128.5kbits/s speed=1.52x D : size=
    2374kB time=00:02:31.27 bitrate= 128.5kbits/s speed=1.52x D : size=
    2386kB time=00:02:32.02 bitrate= 128.6kbits/s speed=1.52x D : size=
    2398kB time=00:02:32.76 bitrate= 128.6kbits/s speed=1.52x D : size=
    2411kB time=00:02:33.60 bitrate= 128.6kbits/s speed=1.52x D : size=
    2422kB time=00:02:34.27 bitrate= 128.6kbits/s speed=1.52x D : size=
    2435kB time=00:02:35.13 bitrate= 128.6kbits/s speed=1.52x D : size=
    2448kB time=00:02:35.87 bitrate= 128.6kbits/s speed=1.52x D : size=
    2460kB time=00:02:36.64 bitrate= 128.7kbits/s speed=1.52x D : size=
    2472kB time=00:02:37.40 bitrate= 128.7kbits/s speed=1.52x D : size=
    2485kB time=00:02:38.22 bitrate= 128.7kbits/s speed=1.52x D : size=
    2496kB time=00:02:38.89 bitrate= 128.7kbits/s speed=1.52x D : size=
    2509kB time=00:02:39.70 bitrate= 128.7kbits/s speed=1.52x D : size=
    2519kB time=00:02:40.35 bitrate= 128.7kbits/s speed=1.51x D : size=
    2530kB time=00:02:41.00 bitrate= 128.7kbits/s speed=1.51x D : size=
    2539kB time=00:02:41.61 bitrate= 128.7kbits/s speed=1.51x D : size=
    2553kB time=00:02:42.47 bitrate= 128.7kbits/s speed=1.51x D : size=
    2566kB time=00:02:43.28 bitrate= 128.7kbits/s speed=1.51x D : size=
    2578kB time=00:02:44.07 bitrate= 128.7kbits/s speed=1.51x D : size=
    2591kB time=00:02:44.86 bitrate= 128.7kbits/s speed=1.51x D : size=
    2602kB time=00:02:45.55 bitrate= 128.8kbits/s speed=1.51x D : size=
    2615kB time=00:02:46.39 bitrate= 128.8kbits/s speed=1.51x D : size=
    2628kB time=00:02:47.18 bitrate= 128.8kbits/s speed=1.51x D : size=
    2641kB time=00:02:47.99 bitrate= 128.8kbits/s speed=1.51x D : size=
    2649kB time=00:02:48.53 bitrate= 128.8kbits/s speed=1.51x D : size=
    2657kB time=00:02:49.04 bitrate= 128.8kbits/s speed=1.51x D : size=
    2671kB time=00:02:49.85 bitrate= 128.8kbits/s speed=1.51x D : size=
    2681kB time=00:02:50.50 bitrate= 128.8kbits/s speed=1.51x D : size=
    2691kB time=00:02:51.10 bitrate= 128.8kbits/s speed=1.51x D : size=
    2703kB time=00:02:51.89 bitrate= 128.8kbits/s speed=1.51x D : size=
    2716kB time=00:02:52.71 bitrate= 128.8kbits/s speed=1.51x D : size=
    2729kB time=00:02:53.47 bitrate= 128.9kbits/s speed=1.51x D : size=
    2741kB time=00:02:54.26 bitrate= 128.9kbits/s speed=1.51x D : size=
    2753kB time=00:02:55.00 bitrate= 128.9kbits/s speed=1.51x D : size=
    2766kB time=00:02:55.79 bitrate= 128.9kbits/s speed=1.51x D : size=
    2779kB time=00:02:56.65 bitrate= 128.9kbits/s speed=1.51x D : size=
    2792kB time=00:02:57.44 bitrate= 128.9kbits/s speed=1.51x D : size=
    2806kB time=00:02:58.32 bitrate= 128.9kbits/s speed=1.51x D : size=
    2819kB time=00:02:59.14 bitrate= 128.9kbits/s speed=1.51x D : size=
    2831kB time=00:02:59.90 bitrate= 128.9kbits/s speed=1.51x D : size=
    2844kB time=00:03:00.74 bitrate= 128.9kbits/s speed=1.51x D : size=
    2878kB time=00:03:03.27 bitrate= 128.6kbits/s speed=1.53x D :
    video:0kB audio:2846kB subtitle:0kB other streams:0kB global
    headers:0kB muxing overhead : 1.109895% D : [aac @ 0xf2a70c00] Qavg :
    2111.697

    Any help will be appreciated.

  • How to play raw h264 produced by MediaCodec encoder ?

    1er novembre 2014, par jackos2500

    I’m a bit new when it comes to MediaCodec (and video encoding/decoding in general), so correct me if anything I say here is wrong.

    I want to play the raw h264 output of MediaCodec with VLC/ffplay. I need this to play becuase my end goal is to stream some live video to a computer, and MediaMuxer only produces a file on disk rather than something I can stream with (very) low latency to a desktop. (I’m open to other solutions, but I have not found anything else that fits the latency requirement)

    Here is the code I’m using encode the video and write it to a file : (it’s based off the MediaCodec example found here, only with the MediaMuxer part removed)

    package com.jackos2500.droidtop;

    import android.media.MediaCodec;
    import android.media.MediaCodecInfo;
    import android.media.MediaFormat;
    import android.opengl.EGL14;
    import android.opengl.EGLConfig;
    import android.opengl.EGLContext;
    import android.opengl.EGLDisplay;
    import android.opengl.EGLExt;
    import android.opengl.EGLSurface;
    import android.opengl.GLES20;
    import android.os.Environment;
    import android.util.Log;
    import android.view.Surface;

    import java.io.BufferedOutputStream;
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.nio.ByteBuffer;

    public class StreamH264 {
       private static final String TAG = "StreamH264";
       private static final boolean VERBOSE = true;           // lots of logging

       // where to put the output file (note: /sdcard requires WRITE_EXTERNAL_STORAGE permission)
       private static final File OUTPUT_DIR = Environment.getExternalStorageDirectory();

       public static int MEGABIT = 1000 * 1000;
       private static final int IFRAME_INTERVAL = 10;

       private static final int TEST_R0 = 0;
       private static final int TEST_G0 = 136;
       private static final int TEST_B0 = 0;
       private static final int TEST_R1 = 236;
       private static final int TEST_G1 = 50;
       private static final int TEST_B1 = 186;

       private MediaCodec codec;
       private CodecInputSurface inputSurface;
       private BufferedOutputStream out;

       private MediaCodec.BufferInfo bufferInfo;
       public StreamH264() {

       }

       private void prepareEncoder() throws IOException {
           bufferInfo = new MediaCodec.BufferInfo();

           MediaFormat format = MediaFormat.createVideoFormat("video/avc", 1280, 720);
           format.setInteger(MediaFormat.KEY_BIT_RATE, 2 * MEGABIT);
           format.setInteger(MediaFormat.KEY_FRAME_RATE, 30);
           format.setInteger(MediaFormat.KEY_COLOR_FORMAT, MediaCodecInfo.CodecCapabilities.COLOR_FormatSurface);
           format.setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, IFRAME_INTERVAL);

           codec = MediaCodec.createEncoderByType("video/avc");
           codec.configure(format, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE);
           inputSurface = new CodecInputSurface(codec.createInputSurface());
           codec.start();

           File dst = new File(OUTPUT_DIR, "test.264");
           out = new BufferedOutputStream(new FileOutputStream(dst));
       }
       private void releaseEncoder() throws IOException {
           if (VERBOSE) Log.d(TAG, "releasing encoder objects");
           if (codec != null) {
               codec.stop();
               codec.release();
               codec = null;
           }
           if (inputSurface != null) {
               inputSurface.release();
               inputSurface = null;
           }
           if (out != null) {
               out.flush();
               out.close();
               out = null;
           }
       }
       public void stream() throws IOException {
           try {
               prepareEncoder();
               inputSurface.makeCurrent();
               for (int i = 0; i < (30 * 5); i++) {
                   // Feed any pending encoder output into the file.
                   drainEncoder(false);

                   // Generate a new frame of input.
                   generateSurfaceFrame(i);
                   inputSurface.setPresentationTime(computePresentationTimeNsec(i, 30));

                   // Submit it to the encoder.  The eglSwapBuffers call will block if the input
                   // is full, which would be bad if it stayed full until we dequeued an output
                   // buffer (which we can't do, since we're stuck here).  So long as we fully drain
                   // the encoder before supplying additional input, the system guarantees that we
                   // can supply another frame without blocking.
                   if (VERBOSE) Log.d(TAG, "sending frame " + i + " to encoder");
                   inputSurface.swapBuffers();
               }
               // send end-of-stream to encoder, and drain remaining output
               drainEncoder(true);
           } finally {
               // release encoder, muxer, and input Surface
               releaseEncoder();
           }
       }

       private void drainEncoder(boolean endOfStream) throws IOException {
           final int TIMEOUT_USEC = 10000;
           if (VERBOSE) Log.d(TAG, "drainEncoder(" + endOfStream + ")");

           if (endOfStream) {
               if (VERBOSE) Log.d(TAG, "sending EOS to encoder");
               codec.signalEndOfInputStream();
           }
           ByteBuffer[] outputBuffers = codec.getOutputBuffers();
           while (true) {
               int encoderStatus = codec.dequeueOutputBuffer(bufferInfo, TIMEOUT_USEC);
               if (encoderStatus == MediaCodec.INFO_TRY_AGAIN_LATER) {
                   // no output available yet
                   if (!endOfStream) {
                       break;      // out of while
                   } else {
                       if (VERBOSE) Log.d(TAG, "no output available, spinning to await EOS");
                   }
               } else if (encoderStatus == MediaCodec.INFO_OUTPUT_BUFFERS_CHANGED) {
                   // not expected for an encoder
                   outputBuffers = codec.getOutputBuffers();
               } else if (encoderStatus == MediaCodec.INFO_OUTPUT_FORMAT_CHANGED) {
                   // should happen before receiving buffers, and should only happen once
                   MediaFormat newFormat = codec.getOutputFormat();
                   Log.d(TAG, "encoder output format changed: " + newFormat);
               } else if (encoderStatus < 0) {
                   Log.w(TAG, "unexpected result from encoder.dequeueOutputBuffer: " + encoderStatus);
                   // let's ignore it
               } else {
                   ByteBuffer encodedData = outputBuffers[encoderStatus];
                   if (encodedData == null) {
                       throw new RuntimeException("encoderOutputBuffer " + encoderStatus + " was null");
                   }

                   if ((bufferInfo.flags & MediaCodec.BUFFER_FLAG_CODEC_CONFIG) != 0) {
                       // The codec config data was pulled out and fed to the muxer when we got
                       // the INFO_OUTPUT_FORMAT_CHANGED status.  Ignore it.
                       if (VERBOSE) Log.d(TAG, "ignoring BUFFER_FLAG_CODEC_CONFIG");
                       bufferInfo.size = 0;
                   }

                   if (bufferInfo.size != 0) {
                       // adjust the ByteBuffer values to match BufferInfo (not needed?)
                       encodedData.position(bufferInfo.offset);
                       encodedData.limit(bufferInfo.offset + bufferInfo.size);

                       byte[] data = new byte[bufferInfo.size];
                       encodedData.get(data);
                       out.write(data);
                       if (VERBOSE) Log.d(TAG, "sent " + bufferInfo.size + " bytes to file");
                   }

                   codec.releaseOutputBuffer(encoderStatus, false);

                   if ((bufferInfo.flags & MediaCodec.BUFFER_FLAG_END_OF_STREAM) != 0) {
                       if (!endOfStream) {
                           Log.w(TAG, "reached end of stream unexpectedly");
                       } else {
                           if (VERBOSE) Log.d(TAG, "end of stream reached");
                       }
                       break;      // out of while
                   }
               }
           }
       }
       private void generateSurfaceFrame(int frameIndex) {
           frameIndex %= 8;

           int startX, startY;
           if (frameIndex < 4) {
               // (0,0) is bottom-left in GL
               startX = frameIndex * (1280 / 4);
               startY = 720 / 2;
           } else {
               startX = (7 - frameIndex) * (1280 / 4);
               startY = 0;
           }

           GLES20.glClearColor(TEST_R0 / 255.0f, TEST_G0 / 255.0f, TEST_B0 / 255.0f, 1.0f);
           GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT);

           GLES20.glEnable(GLES20.GL_SCISSOR_TEST);
           GLES20.glScissor(startX, startY, 1280 / 4, 720 / 2);
           GLES20.glClearColor(TEST_R1 / 255.0f, TEST_G1 / 255.0f, TEST_B1 / 255.0f, 1.0f);
           GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT);
           GLES20.glDisable(GLES20.GL_SCISSOR_TEST);
       }
       private static long computePresentationTimeNsec(int frameIndex, int frameRate) {
           final long ONE_BILLION = 1000000000;
           return frameIndex * ONE_BILLION / frameRate;
       }

       /**
        * Holds state associated with a Surface used for MediaCodec encoder input.
        * <p>
        * The constructor takes a Surface obtained from MediaCodec.createInputSurface(), and uses that
        * to create an EGL window surface.  Calls to eglSwapBuffers() cause a frame of data to be sent
        * to the video encoder.
        * </p><p>
        * This object owns the Surface -- releasing this will release the Surface too.
        */
       private static class CodecInputSurface {
           private static final int EGL_RECORDABLE_ANDROID = 0x3142;

           private EGLDisplay mEGLDisplay = EGL14.EGL_NO_DISPLAY;
           private EGLContext mEGLContext = EGL14.EGL_NO_CONTEXT;
           private EGLSurface mEGLSurface = EGL14.EGL_NO_SURFACE;

           private Surface mSurface;

           /**
            * Creates a CodecInputSurface from a Surface.
            */
           public CodecInputSurface(Surface surface) {
               if (surface == null) {
                   throw new NullPointerException();
               }
               mSurface = surface;

               eglSetup();
           }

           /**
            * Prepares EGL.  We want a GLES 2.0 context and a surface that supports recording.
            */
           private void eglSetup() {
               mEGLDisplay = EGL14.eglGetDisplay(EGL14.EGL_DEFAULT_DISPLAY);
               if (mEGLDisplay == EGL14.EGL_NO_DISPLAY) {
                   throw new RuntimeException("unable to get EGL14 display");
               }
               int[] version = new int[2];
               if (!EGL14.eglInitialize(mEGLDisplay, version, 0, version, 1)) {
                   throw new RuntimeException("unable to initialize EGL14");
               }

               // Configure EGL for recording and OpenGL ES 2.0.
               int[] attribList = {
                       EGL14.EGL_RED_SIZE, 8,
                       EGL14.EGL_GREEN_SIZE, 8,
                       EGL14.EGL_BLUE_SIZE, 8,
                       EGL14.EGL_ALPHA_SIZE, 8,
                       EGL14.EGL_RENDERABLE_TYPE, EGL14.EGL_OPENGL_ES2_BIT,
                       EGL_RECORDABLE_ANDROID, 1,
                       EGL14.EGL_NONE
               };
               EGLConfig[] configs = new EGLConfig[1];
               int[] numConfigs = new int[1];
               EGL14.eglChooseConfig(mEGLDisplay, attribList, 0, configs, 0, configs.length,
                       numConfigs, 0);
               checkEglError("eglCreateContext RGB888+recordable ES2");

               // Configure context for OpenGL ES 2.0.
               int[] attrib_list = {
                       EGL14.EGL_CONTEXT_CLIENT_VERSION, 2,
                       EGL14.EGL_NONE
               };
               mEGLContext = EGL14.eglCreateContext(mEGLDisplay, configs[0], EGL14.EGL_NO_CONTEXT,
                       attrib_list, 0);
               checkEglError("eglCreateContext");

               // Create a window surface, and attach it to the Surface we received.
               int[] surfaceAttribs = {
                       EGL14.EGL_NONE
               };
               mEGLSurface = EGL14.eglCreateWindowSurface(mEGLDisplay, configs[0], mSurface,
                       surfaceAttribs, 0);
               checkEglError("eglCreateWindowSurface");
           }

           /**
            * Discards all resources held by this class, notably the EGL context.  Also releases the
            * Surface that was passed to our constructor.
            */
           public void release() {
               if (mEGLDisplay != EGL14.EGL_NO_DISPLAY) {
                   EGL14.eglMakeCurrent(mEGLDisplay, EGL14.EGL_NO_SURFACE, EGL14.EGL_NO_SURFACE,
                           EGL14.EGL_NO_CONTEXT);
                   EGL14.eglDestroySurface(mEGLDisplay, mEGLSurface);
                   EGL14.eglDestroyContext(mEGLDisplay, mEGLContext);
                   EGL14.eglReleaseThread();
                   EGL14.eglTerminate(mEGLDisplay);
               }

               mSurface.release();

               mEGLDisplay = EGL14.EGL_NO_DISPLAY;
               mEGLContext = EGL14.EGL_NO_CONTEXT;
               mEGLSurface = EGL14.EGL_NO_SURFACE;

               mSurface = null;
           }

           /**
            * Makes our EGL context and surface current.
            */
           public void makeCurrent() {
               EGL14.eglMakeCurrent(mEGLDisplay, mEGLSurface, mEGLSurface, mEGLContext);
               checkEglError("eglMakeCurrent");
           }

           /**
            * Calls eglSwapBuffers.  Use this to "publish" the current frame.
            */
           public boolean swapBuffers() {
               boolean result = EGL14.eglSwapBuffers(mEGLDisplay, mEGLSurface);
               checkEglError("eglSwapBuffers");
               return result;
           }

           /**
            * Sends the presentation time stamp to EGL.  Time is expressed in nanoseconds.
            */
           public void setPresentationTime(long nsecs) {
               EGLExt.eglPresentationTimeANDROID(mEGLDisplay, mEGLSurface, nsecs);
               checkEglError("eglPresentationTimeANDROID");
           }

           /**
            * Checks for EGL errors.  Throws an exception if one is found.
            */
           private void checkEglError(String msg) {
               int error;
               if ((error = EGL14.eglGetError()) != EGL14.EGL_SUCCESS) {
                   throw new RuntimeException(msg + ": EGL error: 0x" + Integer.toHexString(error));
               }
           }
       }
    }
    </p>

    However, the file produced from this code does not play with VLC or ffplay. Can anyone tell me what I’m doing wrong ? I believe it is due to an incorrect format (or total lack) of headers required for the playing of raw h264, as I have had success playing .264 files downloaded from the internet with ffplay. Also, I’m not sure exactly how I’m going to stream this video to a computer, so if somebody could give me some suggestions as to how I might do that, I would be very grateful ! Thanks !