将视频转换为GIF

时间:2019-11-21 14:44:22

标签: java android ffmpeg cloudinary

我正在尝试使我的应用程序接受手机库中的视频,以将其上传并转换为GIF格式。我的代码虽然给出了此构建错误:-

error: <anonymous com.example.bim.Video2gif$2> is not abstract and does not override abstract method onReschedule(String,ErrorInfo) in UploadCallback

以及我的onActivityResult方法上的此警告:-

Overriding method should call super.onActivityResult

代码如下:-

public class Video2gif extends AppCompatActivity {

    private Button uploadBtn;
    private ProgressBar progressBar;
    private int SELECT_VIDEO = 2;
    private ImageView img1;
    private DownloadManager downloadManager;
    private Button download_btn;
    private String gifUrl;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_video2gif);
        MediaManager.init(this);

        progressBar = findViewById(R.id.progress_bar);
        MediaManager.init(this);
        img1 = findViewById(R.id.img1);
        uploadBtn = findViewById(R.id.uploadBtn);

        uploadBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                pickVideoFromGallery();

            }
            private void pickVideoFromGallery() {
                Intent GalleryIntent = new Intent();
                GalleryIntent.setType("video/*");
                GalleryIntent.setAction(Intent.ACTION_GET_CONTENT);
                startActivityForResult(Intent.createChooser(GalleryIntent,
                        "select video"), SELECT_VIDEO);
            }
        });
    }
    @Override
    protected void onActivityResult(int requestCode, int resultCode, final Intent data) {

        if (requestCode == SELECT_VIDEO && resultCode == RESULT_OK) {
            Uri selectedVideo = data.getData();
            MediaManager.get()
                    .upload(selectedVideo)
                    .unsigned("myid")
                    .option("resource_type", "video")
                    .callback(new UploadCallback(){
                        @Override
                        public void onStart(String requestId) {
                            progressBar.setVisibility(View.VISIBLE);
                            Toast.makeText(Video2gif.this,
                                    "Upload Started...", Toast.LENGTH_SHORT).show();
                        }

                        public void onProgress() {
                        }

                        public void onSuccess(String requestId, Map resultData) {

                            Toast.makeText(Video2gif.this, "Uploaded Succesfully",
                                    Toast.LENGTH_SHORT).show();
                            progressBar.setVisibility(View.GONE);
                            uploadBtn.setVisibility(View.INVISIBLE);

                            String publicId = resultData.get("public_id").toString();

                            gifUrl = MediaManager.get().url().resourceType("video")
                                    .transformation(new Transformation().videoSampling("25")
                                            .delay("200").height(200).effect("loop:10").crop("scale"))
                                    .resourceType("video").generate(publicId+".gif");

                            Glide.with(getApplicationContext()).asGif().load(gifUrl).into(img1);
                            download_btn.setVisibility(View.VISIBLE);

                        }
                        public void onError(String requestId, ErrorInfo error) {
                            Toast.makeText(Video2gif.this,
                                    "Upload Error", Toast.LENGTH_SHORT).show();
                            Log.v("ERROR!!", error.getDescription());
                        }


        });
    }
}

}

我还使用Cloudinary帮助将视频处理为GIF。任何帮助将不胜感激,非常感谢!

1 个答案:

答案 0 :(得分:1)

在android中使用界面时,您需要在活动/片段(覆盖)中包括它们所包含的回调方法。同样,要覆盖某些系统方法,还需要调用它们的super,这意味着许多活动在彼此继承时可能正在侦听同一回调。通过在这些回调中添加super,您可以使结果遍历所有这些回调。因此,对于OnActivityResult,只需在您的方法中添加以下行:

super.onActivityResult(requestCode, resultCode, data);

对于onReschedule,您可以让Android Studio为您生成该文件。只需转到“代码”->“生成替代方法”,然后选择onReschedule