недопустимое исключение аргумента java: inputFile не существует - PullRequest
0 голосов
/ 01 октября 2018

Я занимаюсь разработкой, которая берет видео из хранилища через намерение.Так что я столкнулся с этой проблемой

Проблема: -

java.lang.illegalArgumentException: inputFile не существует: / document / video: 105065

Код: -

Намерение

    public void videotext( View v ) {
        Intent i = new Intent(Intent.ACTION_GET_CONTENT);
        i.setType("video/*");
        startActivityForResult(i, request);
    }

В результате активности

  @Override
    protected void onActivityResult( int requestCode, int resultCode, Intent data ) {
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == RESULT_OK) {
            if (requestCode == request) {
                uri = data.getData();
                mSurfaceView.setVideoURI(uri);
                //MediaController media1=new MediaController(this);
                media.setAnchorView(mSurfaceView);
                mSurfaceView.setMediaController(media);
                mSurfaceView.start();
                inputFile=new File(uri.getPath());
                inputFile=inputFile.getAbsoluteFile();
                VideoCompress(inputFile,OutputFile);
            }

        }
    }
    

VideoCompress - метод сжатия видео ..

    public  void VideoCompress(File inputFile,File OutputFile)
    {

        GiraffeCompressor.create() //two implementations: mediacodec and ffmpeg,default is mediacodec
                .input(inputFile) //set video to be compressed
                .output(OutputFile) //set compressed video output
                .bitRate(2073600)//set bitrate 码率
                .resizeFactor(Float.parseFloat(String.valueOf(1.0)))//set video resize factor 分辨率缩放,默认保持原分辨率
               // .watermark("/sdcard/videoCompressor/watermarker.png")//add watermark(take a long time) 水印图片(需要长时间处理)
                .ready()
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Subscriber<GiraffeCompressor.Result>() {
                    @Override
                    public void onCompleted() {
                        Toast.makeText(UploadVideo.this,"Compressing",Toast.LENGTH_LONG).show();

                    }

                    @Override
                    public void onError(Throwable e) {
                        Toast.makeText(UploadVideo.this,e.toString(),Toast.LENGTH_LONG).show();

                    }

                    @Override
                    public void onNext(GiraffeCompressor.Result s) {
                        Toast.makeText(UploadVideo.this,"Compressed",Toast.LENGTH_LONG).show();
                    }
                });

    }

1 Ответ

0 голосов
/ 01 октября 2018

Используйте этот метод, чтобы получить путь для вашего Uri:

public static String getPath(Context context,Uri uri) {
    Cursor cursor = context.getContentResolver().query(uri, null, null, null, null);
    cursor.moveToFirst();
    int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
    return cursor.getString(idx);
}

используйте его как mSurfaceView.setVideoURI(data.getData());

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...