Recherche avancée

Médias (91)

Autres articles (103)

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

  • MediaSPIP version 0.1 Beta

    16 avril 2011, par

    MediaSPIP 0.1 beta est la première version de MediaSPIP décrétée comme "utilisable".
    Le fichier zip ici présent contient uniquement les sources de MediaSPIP en version standalone.
    Pour avoir une installation fonctionnelle, il est nécessaire d’installer manuellement l’ensemble des dépendances logicielles sur le serveur.
    Si vous souhaitez utiliser cette archive pour une installation en mode ferme, il vous faudra également procéder à d’autres modifications (...)

  • Amélioration de la version de base

    13 septembre 2013

    Jolie sélection multiple
    Le plugin Chosen permet d’améliorer l’ergonomie des champs de sélection multiple. Voir les deux images suivantes pour comparer.
    Il suffit pour cela d’activer le plugin Chosen (Configuration générale du site > Gestion des plugins), puis de configurer le plugin (Les squelettes > Chosen) en activant l’utilisation de Chosen dans le site public et en spécifiant les éléments de formulaires à améliorer, par exemple select[multiple] pour les listes à sélection multiple (...)

Sur d’autres sites (10378)

  • FFMPEG h.264 stream to VLC from raw YUV444 produces black screen

    30 novembre 2018, par GerbGerb

    Not sure if this fits better here or over on Super User, so please redirect if here is the wrong place.

    I am piping raw YUV444 640x480 frames to ffmpeg from inside a C++ program using stdout. ffmpeg encodes them using h.264 and streams the video via UDP to an IP of my choice.

    When I am not streaming and saving the video as -mp4 file, everything works - But when I stream over the network and try to receive in VLC, the stream is received and the playing timer under the video screen runs, but the image is black, none of the video is displayed. Also I have some crackling sounds on my audio output.

    My FFMPEG settings are as follows :

    ffmpeg -y -loglevel info -f rawvideo -r 25 -c:v rawvideo -pix_fmt yuv444p -s 640x480 -i - -c:v libx264 -preset superfast -framerate 25 -f mpegts udp://192.168.150.1:20001

    in VLC, I just use "open network stream" with udp ://@:20001. The port is open, I tested it with a simple dummy sender/receiver.
    Almost the same cli arguments for the video recording lead to a perfectly playable video when writing to a file and downloading it :

    ffmpeg -y -loglevel info -f rawvideo -r 25 -c:v rawvideo -pix_fmt yuv444p -s 640x480 -i - -c:v libx264 -preset superfast -framerate 25 video.mp4

    If I try to stream the same video using

    ffmpeg -i video.mp4 -v 0 -vcodec mpeg4 -f mpegts udp://192.168.150:20001

    the screen remains black.

    VLC debug output changes between different runs, because other modules are selected, so I assume stream type recognition goes haywire. But why ?

    What am I doing wrong ?

    Here the ffmpeg log
    and the VLC log

  • Changing Audio Volume using FFmpeg Android Error

    23 août 2018, par kataroty

    I am using FFmpeg and I need to change the volume of the Audio.

    This is the command that should change the volume of the audio :

    ffmpeg -i input.wav -filter:a "volume=1.5" output.wav

    I read from somewhere that it had to overwrite the file if it already existed so either one had to delete the file or use -y. When I tried to do it without the -y command it never got to onSuccess() or ´onFailure(), but it always printed out the onStart() message.

    String[] cmdy = { "-i -y" , pcmtowavTempFile.toString(),  "-af", "volume=5", pcmtowavTempFile.toString()};
       ffmpeg.execute(cmdy, new ExecuteBinaryResponseHandler() {

           @Override
           public void onStart() {
               System.out.println("ayy: onStart");
           }

           @Override
           public void onSuccess(String message) {
               System.out.println("ayy: onSuccess");
               super.onSuccess(message);
           }
           @Override
           public void onFailure(String message) {
               System.out.println("ayy: onFailure " + message);
               super.onFailure(message);
           }
    });

    At the moment I get this error :

    ffmpeg version n4.0-39-gda39990 Copyright (c) 2000-2018 the FFmpeg developers
     built with gcc 4.9.x (GCC) 20150123 (prerelease)
     configuration: --target-os=linux --cross-prefix=/root/bravobit/ffmpeg-android/toolchain-android/bin/arm-linux-androideabi- --arch=arm --cpu=cortex-a8 --enable-runtime-cpudetect --sysroot=/root/bravobit/ffmpeg-android/toolchain-android/sysroot --enable-pic --enable-libx264 --enable-ffprobe --enable-libopus --enable-libvorbis --enable-libfdk-aac --enable-libfreetype --enable-libfribidi --enable-libmp3lame --enable-fontconfig --enable-libvpx --enable-libass --enable-yasm --enable-pthreads --disable-debug --enable-version3 --enable-hardcoded-tables --disable-ffplay --disable-linux-perf --disable-doc --disable-shared --enable-static --enable-runtime-cpudetect --enable-nonfree --enable-network --enable-avresample --enable-avformat --enable-avcodec --enable-indev=lavfi --enable-hwaccels --enable-ffmpeg --enable-zlib --enable-gpl --enable-small --enable-nonfree --pkg-config=pkg-config --pkg-config-flags=--static --prefix=/root/bravobit/ffmpeg-android/build/armeabi-v7a --extra-cflags='-I/root/bravobit/ffmpeg-android/toolchain-android/include -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fno-strict-overflow -fstack-protector-all' --extra-ldflags='-L/root/bravobit/ffmpeg-android/toolchain-android/lib -Wl,-z,relro -Wl,-z,now -pie' --extra-cxxflags=
     libavutil      56. 14.100 / 56. 14.100
     libavcodec     58. 18.100 / 58. 18.100
     libavformat    58. 12.100 / 58. 12.100
     libavdevice    58.  3.100 / 58.  3.100
     libavfilter     7. 16.100 /  7. 16.100
     libavresample   4.  0.  0 /  4.  0.  0
     libswscale      5.  1.100 /  5.  1.100
     libswresample   3.  1.100 /  3.  1.100
     libpostproc    55.  1.100 / 55.  1.100
    Unrecognized option 'i -y'.

    Which clearly states that it does not recognize option i -y, but also as I said earlier then if I remove the -y it never gets to onSuccess() or onFailure().

    help me to find a solution. Thanks.

  • How to decrease the latency of the RTP streaming with ffmpeg in Android ?

    24 août 2018, par Douglas Lima Dantas

    I’m creating a App that do a RTP streaming. It uses a ParcelFileDescriptor pipe pair, where a MediaRecorder writes in the pipe while the ffmpeg receives the audio from the pipe and sends by RTP.

    In my desktop, using the same wifi router, I receive the RTP stream using ffplay, and it has a delay between 5s 10s.

    I tried capture audio using ffmpeg in Android, but itsn’t possible. I tried to use ffplay -fflags nobuffer, use MIC as source, change the encoder, etc.

    I need the lowest delay possible. How can I do it ?

    The code :

    public class MainActivity extends AppCompatActivity implements View.OnClickListener {
       MediaRecorder mediaRecorder;
       AudioRecord record;
       MediaPlayer mediaPlayer;
       ParcelFileDescriptor[] pipePair;
       ParcelFileDescriptor pipeRead;
       ParcelFileDescriptor pipeWrite;
       Process ffmpegProc;
       // Requesting permission to RECORD_AUDIO
       private boolean permissionsAccepted = false;
       private String [] permissions = {
               Manifest.permission.RECORD_AUDIO,
               Manifest.permission.INTERNET,
               Manifest.permission.ACCESS_NETWORK_STATE
       };
       private static final int REQUEST_PERMISSIONS = 200;

       @Override
       public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
           super.onRequestPermissionsResult(requestCode, permissions, grantResults);
           switch (requestCode){
               case REQUEST_PERMISSIONS:
                   permissionsAccepted  = grantResults[0] == PackageManager.PERMISSION_GRANTED;
                   break;
           }
           if (!permissionsAccepted ) finish();

       }

       @Override
       protected void onCreate(Bundle savedInstanceState) {
           super.onCreate(savedInstanceState);
           setContentView(R.layout.activity_main);
           ActivityCompat.requestPermissions(this, permissions, REQUEST_PERMISSIONS);

           TextView hello = (TextView) findViewById(R.id.hello);
           hello.setOnClickListener(new View.OnClickListener() {
               @Override
               public void onClick(View view) {
                   Toast.makeText(MainActivity.this, "Clicado",Toast.LENGTH_SHORT)
                           .show();
                   copiarFFMpeg();

               }
           });

       }

       private void executarFFMpeg(final String[] cmd, ParcelFileDescriptor read) {

           try {
               ffmpegProc = Runtime.getRuntime().exec(cmd);
           } catch (IOException e) {
               e.printStackTrace();
           }

           (new Thread(new Runnable() {
               @Override
               public void run() {
                   try {
                       InputStream inStream = ffmpegProc.getInputStream();
                       InputStreamReader sReader = new InputStreamReader(inStream);
                       BufferedReader bufferedReader = new BufferedReader(sReader);
                       String line;
                       while ((line = bufferedReader.readLine()) != null) {
                           Log.d("FFMPEG",line);
                       }
                   } catch (IOException e) {
                       e.printStackTrace();
                   }
               }
           })).start();

           (new Thread(new Runnable() {
               @Override
               public void run() {
                   byte[] buffer = new byte[8192];
                   int read = 0;

                   OutputStream ffmpegInput = ffmpegProc.getOutputStream();
                   FileInputStream reader = new FileInputStream(pipeRead.getFileDescriptor());

                   try {

                       while (true) {

                           if (reader.available()>0) {
                               read = reader.read(buffer);
                               ffmpegInput.write(buffer, 0, read);
                               ffmpegInput.flush();
                           } else {
                               Thread.sleep(10);
                           }

                       }

                   } catch (InterruptedException e) {
                       e.printStackTrace();

                   } catch (IOException e) {
                       e.printStackTrace();

                       onDestroy();
                   }
               }
           })).start();

           Log.d("FFMPEG","Executado");
       }

       private boolean estaExecutando(Process ffmpegProc) {
           if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
               return ffmpegProc.isAlive();
           } else {
               try {
                   ffmpegProc.exitValue();
                   return false;
               } catch (Exception e) {
                   return true;
               }
           }
       }

       private void criarMediaRecorder() {
           if (pipeWrite != null) {
               try {
                   //ffplay.exe -protocol_whitelist rtp,file,udp ..\file.sdp
                   mediaRecorder = new MediaRecorder();
                   mediaRecorder.setAudioSource(MediaRecorder.AudioSource.VOICE_COMMUNICATION);
                   mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.AAC_ADTS);
                   mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
                   //mediaRecorder.setAudioChannels(2);
                   mediaRecorder.setOutputFile(pipeWrite.getFileDescriptor());
                   mediaRecorder.prepare();
                   mediaRecorder.start();
                   Log.d("MREC","MediaRecorder criado");
               } catch (Exception e) {
                   e.printStackTrace();
               }
           }
       }

       private void criarPipe() {
           try {
               pipePair =ParcelFileDescriptor.createPipe();
           } catch (IOException e) {
               Log.e("PIPE","Deu zica na criação do pipe");
               e.printStackTrace();
               finish();
           }
           pipeRead = new ParcelFileDescriptor(pipePair[0]);
           pipeWrite  = new ParcelFileDescriptor(pipePair[1]);
       }

       private void copiarFFMpeg() {
           FFmpeg ffmpeg = FFmpeg.getInstance(this);
           try {
               ffmpeg.loadBinary(new LoadBinaryResponseHandler() {

                   @Override
                   public void onStart() {
                       Log.d("FFMPEG","Iniciar cópia");
                   }

                   @Override
                   public void onFailure() {
                       Log.e("FFMPEG","Cópia falhou");
                   }

                   @Override
                   public void onSuccess() {
                       Log.d("FFMPEG","Cópiado com sucesso");

                       criarPipe();
                       //mediaRecorder.start();
                       File ffmpegBin = new File(getFilesDir().getAbsolutePath()+"/ffmpeg");
                       String[] cmd = new String[] {
                               ffmpegBin.getAbsolutePath(),
                               "-re",
                               "-thread_queue_size","4",
                               "-i","pipe:",
                               //"-c:a","libx264",
                               //"-preset","veryfast",
                               //"-tune","zerolatency",
                               "-f",
                               "rtp",
                               "rtp://192.168.0.33:1234"
                       };

                       executarFFMpeg(cmd, pipeRead);

                       criarMediaRecorder();
                   }

                   @Override
                   public void onFinish() {
                   }
               });
           } catch (FFmpegNotSupportedException e) {
               // Handle if FFmpeg is not supported by device
               Log.e("FFMPEG", "Não sou suportado :/");
           }
       }

       @Override
       protected void onDestroy() {
           super.onDestroy();
       }

       @Override
       public void onClick(View view) {

       }
    }

    The command :

    ffplay rtp://192.168.0.33:1234

    ffplay -fflags nobuffer rtp://192.168.0.33:1234