Recherche avancée

Médias (1)

Mot : - Tags -/swfupload

Autres articles (50)

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

  • FFmpeg - cannot find ExecuteBinaryResponseHandler - Android/Java

    20 juillet 2018, par pudility

    I am trying to make a module for react-native that will change a video into a gif. I have little to no experience with android studios/java, but I would love to learn more ! I am using this library to convert the video to a gif. Here is my code :

    package com.reactlibrary;

    import android.widget.Toast;
    import com.facebook.react.bridge.ReactApplicationContext;
    import com.facebook.react.bridge.ReactContextBaseJavaModule;
    import com.facebook.react.bridge.ReactMethod;
    import com.github.hiteshsondhi88.libffmpeg.FFmpeg;

    public class RNGifMakerModule extends ReactContextBaseJavaModule {

     private final ReactApplicationContext reactContext;

     public RNGifMakerModule(ReactApplicationContext reactContext) {
       super(reactContext);
       this.reactContext = reactContext;
     }

     @Override
     public String getName() {
       return "RNGifMakerModule";
     }

     @ReactMethod
     public void alert(String message) {
         Toast.makeText(getReactApplicationContext(), "Error", Toast.LENGTH_LONG).show();
         String[] cmd = {"-i"
                 , message
                 , "Image.gif"};
         conversion(cmd);
     }

     public void conversion(String[] cmd) {

       FFmpeg ffmpeg = FFmpeg.getInstance(this.reactContext);

       try {


         // to execute "ffmpeg -version" command you just need to pass "-version"
         ffmpeg.execute(cmd, new ExecuteBinaryResponseHandler() {

           @Override
           public void onStart() {
           }

           @Override
           public void onProgress(String message) {
           }

           @Override
           public void onFailure(String message) {
           }

           @Override
           public void onSuccess(String message) {
           }

           @Override
           public void onFinish() {
           }
         });
       } catch (FFmpegCommandAlreadyRunningException e) {
         // Handle if FFmpeg is already running
         e.printStackTrace();
       }
     }
    }

    And I get this error :

    Error:(43, 31) error: cannot find symbol class ExecuteBinaryResponseHandler

    This seems odd to be, because in the documentation for ffmpeg-android-java it says to use almost exactly the same code.

    Bounty

    The bounty will be awarded to you if you can find a way to convert a video.mp4 into a gif. You do not necessarily have to use FFmpeg, but your solution has to work with java/android studios.

  • Android : Select from images extracted with FFMPEG

    21 juillet 2017, par Tix

    I’m currently able to extract images(frames) from a video, and display all the extracted images using the code below, how do i make it so that the displayed images could be selected by user and passed as a bitmap to another activity ?

    FFMPEG Compiled using

    compile ’com.writingminds:FFmpegAndroid:0.3.2’

    Complex Command used to get the frames/images

    String[] complexCommand = "-y", "-i", yourRealPath, "-an", "-framerate", "60", "-vf", "select=’gte(n,45)’", "-vsync", "0", dest.getAbsolutePath() ;

    Main Activity

           /**
            * Command for extracting images from video
            */
           private void extractImagesVideo(int startMs, int endMs) {
               File moviesDir = Environment.getExternalStoragePublicDirectory(
                       Environment.DIRECTORY_PICTURES
               );

               String filePrefix = "extract_picture";
               String fileExtn = ".jpg";
               String yourRealPath = getPath(MainActivity.this, selectedVideoUri);

               File dir = new File(moviesDir, "VideoEditor");
               int fileNo = 0;
               while (dir.exists()) {
                   fileNo++;
                   dir = new File(moviesDir, "VideoEditor" + fileNo);

               }
               dir.mkdir();
               filePath = dir.getAbsolutePath();
               File dest = new File(dir, filePrefix + "%03d" + fileExtn);


               Log.d(TAG, "startTrim: src: " + yourRealPath);
               Log.d(TAG, "startTrim: dest: " + dest.getAbsolutePath());

               String[] complexCommand = {"-y", "-i", yourRealPath, "-an", "-r", "1/2", "-ss", "" + startMs / 1000, "-t", "" + (endMs - startMs) / 1000, dest.getAbsolutePath()};

               execFFmpegBinary(complexCommand);

           }

        /**
            * Executing ffmpeg binary
            */
           private void execFFmpegBinary(final String[] command) {
               try {
                   ffmpeg.execute(command, new ExecuteBinaryResponseHandler() {
                       @Override
                       public void onFailure(String s) {
                           Log.d(TAG, "FAILED with output : " + s);
                       }

                       @Override
                       public void onSuccess(String s) {
                           Log.d(TAG, "SUCCESS with output : " + s);
                           if (choice == 1 || choice == 2 || choice == 5 || choice == 6 || choice == 7) {
                               Intent intent = new Intent(MainActivity.this, PreviewActivity.class);
                               intent.putExtra(FILEPATH, filePath);
                               startActivity(intent);
                           } else if (choice == 3) {
                               Intent intent = new Intent(MainActivity.this, PreviewImageActivity.class);
                               intent.putExtra(FILEPATH, filePath);
                               startActivity(intent);
                           } else if (choice == 4) {
                               Intent intent = new Intent(MainActivity.this, AudioPreviewActivity.class);
                               intent.putExtra(FILEPATH, filePath);
                               startActivity(intent);
                           } else if (choice == 8) {
                               choice = 9;
                               reverseVideoCommand();
                           } else if (Arrays.equals(command, lastReverseCommand)) {
                               choice = 10;
                               concatVideoCommand();
                           } else if (choice == 10) {
                               File moviesDir = Environment.getExternalStoragePublicDirectory(
                                       Environment.DIRECTORY_MOVIES
                               );
                               File destDir = new File(moviesDir, ".VideoPartsReverse");
                               File dir = new File(moviesDir, ".VideoSplit");
                               if (dir.exists())
                                   deleteDir(dir);
                               if (destDir.exists())
                                   deleteDir(destDir);
                               choice = 11;
                               Intent intent = new Intent(MainActivity.this, PreviewActivity.class);
                               intent.putExtra(FILEPATH, filePath);
                               startActivity(intent);
                           }
                       }

    PreviewImageActivity

       public class PreviewImageActivity extends AppCompatActivity {

           private static final String FILEPATH = "filepath";
               @Override
               protected void onCreate(@Nullable Bundle savedInstanceState) {
                   super.onCreate(savedInstanceState);
                   setContentView(R.layout.activity_gallery);
                   getSupportActionBar().setDisplayHomeAsUpEnabled(true);
                   getSupportActionBar().setDisplayShowHomeEnabled(true);
                   TextView tvInstruction=(TextView)findViewById(R.id.tvInstruction) ;

                   GridLayoutManager lLayoutlLayout = new GridLayoutManager(PreviewImageActivity.this, 4);
                   RecyclerView rView = (RecyclerView)findViewById(R.id.recycler_view);
                   rView.setHasFixedSize(true);
                   rView.setLayoutManager(lLayoutlLayout);
                   String filePath = getIntent().getStringExtra(FILEPATH);
                   ArrayList<string> f = new ArrayList<string>();



      File dir = new File(filePath);
               tvInstruction.setText("Images stored at path "+filePath);
               File[] listFile;

                   listFile = dir.listFiles();



               for(File e:listFile)
               {
                   f.add(e.getAbsolutePath());
               }

               PreviewImageAdapter rcAdapter = new PreviewImageAdapter( f);
               rView.setAdapter(rcAdapter);


           }
       @Override
       public boolean onOptionsItemSelected(MenuItem item) {
           // handle arrow click here
           if (item.getItemId() == android.R.id.home) {
               finish(); // close this activity and return to preview activity (if there is any)
           }

           return super.onOptionsItemSelected(item);
       }
    }
    </string></string>

    PreviewImageAdapter

    public class PreviewImageAdapter extends RecyclerView.Adapter {

       private ArrayList<string> paths;

       public PreviewImageAdapter( ArrayList<string> paths) {
           this.paths = paths;
       }

       @Override
       public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
           View itemView = LayoutInflater.from(parent.getContext())
                   .inflate(R.layout.item_gallery, parent, false);

           return new MyViewHolder(itemView);
       }

       @Override
       public void onBindViewHolder(MyViewHolder holder, int position) {
           Bitmap bmp = BitmapFactory.decodeFile(paths.get(position));
           holder.ivPhoto.setImageBitmap(bmp);
       }

       @Override
       public int getItemCount() {
           return paths.size();
       }

       public class MyViewHolder extends RecyclerView.ViewHolder {
           private ImageView ivPhoto;

           public MyViewHolder(View itemView) {
               super(itemView);

               ivPhoto = (ImageView) itemView.findViewById(R.id.ivPhoto);
           }
       }

    }
    </string></string>
  • java.lang.NoClassDefFoundError Android Studio Unity

    26 juin 2017, par Nestoraj

    I’m having some troubles when I try to generate a library that contains another one in Android Studio. First of all I am using Android Studio 2.0 and Unity 5.3.4f1. What I want to do is integrate FFMpeg in Unity so I decided to create my own library that use FFMpeg library as an intermediary. The FFMpeg library is here.

    To start I created a new empty project in Android Studio and inside of it, created a new module, which will be my library, using New->Module->Android Library and named it "ffmpegcodec". After that I opened build.gradle file inside the new module folder and paste :

    compile 'com.writingminds:FFmpegAndroid:0.3.2'

    inside dependencies brackets, and click Sync (It did not show any error).

    After that create a new Java Class inside src/main/java/package-name/ and named it FFMpegCodec. Inside this paste this code :

    public class FFMpegCodec {
    private static FFmpeg ffmpeg;
    private static Context context;
    private static FFMpegCodec INSTANCE = null;

    public FFMpegCodec(){
       INSTANCE = this;
    }

    public static FFMpegCodec instance(){
       if(INSTANCE == null){
           INSTANCE = new FFMpegCodec();
       }
       return INSTANCE;
    }

    public void setContext(Context ctx){
       this.context = ctx;
    }

    public void loadFFMpegBinary() {
       try {
           if (ffmpeg == null) {

               ffmpeg = FFmpeg.getInstance(context);
           }
           ffmpeg.loadBinary(new LoadBinaryResponseHandler() {
               @Override
               public void onFailure() {
                   Log.e("FFMPEG", "ffmpeg : NOT correct Loaded");
               }

               @Override
               public void onSuccess() {
                   Log.e("FFMPEG", "ffmpeg : correct Loaded");
               }
           });
       } catch (FFmpegNotSupportedException e) {

       } catch (Exception e) {

       }
    }

    public void execFFmpegCommand(final String[] command) {
       try {
           ffmpeg.execute(command, new ExecuteBinaryResponseHandler() {
               @Override
               public void onFailure(String s) {
                   Log.e("FFMPEG", "FAILED with output : " + s);
               }

               @Override
               public void onSuccess(String s) {
                   Log.e("FFMPEG", "SUCCESS with output : " + s);
               }

               @Override
               public void onProgress(String s) {
                   Log.e("FFMPEG", "Started command : ffmpeg " + command);
                   Log.e("FFMPEG", "progress : " + s);
               }

               @Override
               public void onStart() {
                   Log.e("FFMPEG", "Started command : ffmpeg " + command);

               }

               @Override
               public void onFinish() {
                   Log.e("FFMPEG", "Finished command : ffmpeg " + command);

               }
           });
       } catch (FFmpegCommandAlreadyRunningException e) {
           // do nothing for now
       }
    }

    It basically generates an instance of FFmpeg and makes calls of ffmpeg commands.

    Once I have my lib done I decided to test it in my project so I include my lib in my app graddle using :

    compile project(':ffmpegcodec')

    After that I just paste this code to my MainActivity :

    public class MainActivity extends AppCompatActivity {

    FFMpegCodec ffmpeg;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);

       Button execCommandButton = (Button) findViewById(R.id.execCommandButton);

       ffmpeg = FFMpegCodec.instance();


       execCommandButton.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View v) {
               Toast.makeText(getApplicationContext(), "This is a Toast!!", Toast.LENGTH_SHORT).show();
               ffmpeg.setContext(MainActivity.this);
               ffmpeg.loadFFMpegBinary();
               String []cmd = new String[1];
               cmd[0] = "-version";
               ffmpeg.execFFmpegCommand(cmd);
           }
       });

    }

    After that, I run my project and when I press the button it returns that everythings its ok, showing ffmpeg version.
    Once I have check that my lib works I decide to move it to Unity so copy the ffmpegcodec-realese.arr file inside ffmpegcodec/build/outputs/aar folder and paste it into my Unity project. Then I wrote an C# script to use my lib that contains this :

       using System;
       using System.Runtime.InteropServices;
       using UnityEngine;
       using System.Collections;
       using System.Diagnostics;

       public class ScreenRecorder {

       private AndroidJavaObject unityActivity = null;
       private AndroidJavaObject captureObject = null;

           // Use this for initialization
           public ScreenRecorder () {
               try{

                   using (AndroidJavaClass unityPlayerActivityClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer")) {
                       unityActivity = unityPlayerActivityClass.GetStatic<androidjavaobject>("currentActivity");
                   }

                   AndroidJavaClass captureClass = new AndroidJavaClass ("com.promineostudios.ffmpegcodec.FFMpegCodec");
                   if (captureClass != null) {
                       captureObject = captureClass.CallStatic<androidjavaobject>("instance");
                       captureObject.Call("setContext", unityActivity);
                       captureObject.Call("loadFFMpegBinary");
                   }
               }catch(Exception ex){
                   UnityEngine.Debug.Log(ex);
               }
           }

       }
    </androidjavaobject></androidjavaobject>

    The problems comes here. When I create a class instance using :

    AndroidJavaClass captureClass = new AndroidJavaClass ("com.promineostudios.ffmpegcodec.FFMpegCodec");

    It creates an instance correctly, and also when I create an object using :

    captureObject = captureClass.CallStatic<androidjavaobject>("instance");
    </androidjavaobject>

    But when I try to get access to FFMpeg library methods like in "setContext" it fails and returns this :

    UnityEngine.AndroidJavaException: java.lang.NoClassDefFoundError: Failed resolution of: Lcom/github/hiteshsondhi88/libffmpeg/FFmpeg;
    java.lang.NoClassDefFoundError: Failed resolution of: Lcom/github/hiteshsondhi88/libffmpeg/FFmpeg;
     at com.promineostudios.ffmpegcodec.FFMpegCodec.loadFFMpegBinary(FFMpegAndroidCodec.java:39)
     at com.unity3d.player.UnityPlayer.nativeRender(Native Method)
     at com.unity3d.player.UnityPlayer.a(Unknown Source)
     at com.unity3d.player.UnityPlayer$b.run(Unknown Source)
    Caused by: java.lang.ClassNotFoundException: Didn't find class "com.github.hiteshsondhi88.libffmpeg.FFmpeg" on path: DexPathList[[zip file "/data/app/com.promineostudios.ffmpegmodule-1/base.apk"],nativeLibraryDirectories=[/data/app/com.promineostudios.ffmpegmodule-1/lib/arm, /vendor/lib, /system/lib]]
     at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
     at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
     at java.lang.ClassLoader.loadClass(ClassLoader.java:469)
     at com.promineostudios.ffmpegcodec.FFMpegCodec.loadFFMpegBinary(FFMpegAndroidCodec.java:39) 
     at com.unity3d.player.UnityPlayer.nativeRender(Native Method) 
     at com.unity3d.player.UnityPlayer.a(Unknown Source) 
     at com.unity3d.player.UnityPlayer$b.run(Unknown Source)

    I think that the problem is in when I export my lib into Unity but I do not know what is going wrong. If anybody could help me I will be really appreciated.

    Thanks and excuse me for my English.