相关疑难解决方法(0)

使用mp4parser,我如何处理从Uri和ContentResolver中获取的视频?

背景

我们希望让用户从任何应用中选择视频,然后将视频剪裁为最多5秒.

问题

为了让Uri被选中,我们让它工作正常(这里有解决方案).

至于修剪本身,我们找不到任何具有许可许可的好图书馆,除了一个名为"k4l-video-trimmer"的图书馆.例如,库"FFmpeg"被认为是非许可,因为它使用GPLv3,这要求使用它的应用程序也是开源的.此外,正如我所读,它需要相当多(约9MB).

可悲的是,这个库(k4l-video-trimmer)很老了,多年没有更新了,所以我不得不把它(这里)分叉,以便很好地处理它.它使用一个名为"mp4parser"的开源库来进行修剪.

问题是,这个库似乎只能处理文件,而不是一个Uri或者InputStream,所以即使样本在选择像普通文件一样无法访问的项目时也会崩溃,甚至还有无法处理的路径.我知道在很多情况下可以获得文件的路径,但在许多其他情况下,它不是,我也知道可以只复制文件(这里),但这不是一个好的解决方案,因为文件可能很大并占用大量空间,即使它已经可以访问.

我试过的

库有两个地方使用文件:

  1. 在"K4LVideoTrimmer"文件中,在"setVideoURI"函数中,它只是获取要显示的文件大小.根据Google的文档,这里的解决方案非常简单:

    public void setVideoURI(final Uri videoURI) {
        mSrc = videoURI;
        if (mOriginSizeFile == 0) {
            final Cursor cursor = getContext().getContentResolver().query(videoURI, null, null, null, null);
            if (cursor != null) {
                int sizeIndex = cursor.getColumnIndex(OpenableColumns.SIZE);
                cursor.moveToFirst();
                mOriginSizeFile = cursor.getLong(sizeIndex);
                cursor.close();
                mTextSize.setText(Formatter.formatShortFileSize(getContext(), mOriginSizeFile));
            }
        }
     ...
    
    Run Code Online (Sandbox Code Playgroud)
  2. 在"TrimVideoUtils"文件中,在"startTrim"中调用"genVideoUsingMp4Parser"函​​数.在那里,它使用以下方法调用"mp4parser"库:

    Movie movie = MovieCreator.build(new FileDataSourceViaHeapImpl(src.getAbsolutePath()));
    
    Run Code Online (Sandbox Code Playgroud)

    它说他们使用FileDataSourceViaHeapImpl(来自"mp4parser"库)来避免Android上的OOM,所以我决定继续使用它.

    事实是,它有4个CTORS,都期望文件有一些变化:File,filePath,FileChannel,FileChannel + fileName. …

android filechannel inputstream android-contentresolver mp4parser

16
推荐指数
1
解决办法
587
查看次数

MediaMuxer错误"无法停止复用器"

Camera使用MediaCodecmime-type"video/avc" 编码预览数据,并将编码数据(仅限视频,无音频)传递给MediaMuxer.复用器似乎运行正常并创建一个合理大小的输出文件(即,我记录的时间越长,越大).但是,当我尝试停止复用器时,我得到"无法停止复用器"错误:

10-21 10:39:40.755: E/AndroidRuntime(2166): Caused by: java.lang.IllegalStateException: Failed to stop the muxer
Run Code Online (Sandbox Code Playgroud)

在失败的停止之前有一些可疑的MPEG4Writer日志消息:

10-21 10:39:40.740: D/MPEG4Writer(2166): Stopping Video track
10-21 10:39:40.740: E/MPEG4Writer(2166): Missing codec specific data
10-21 10:39:40.740: W/MPEG4Writer(2166): 0-duration samples found: 122
10-21 10:39:40.740: I/MPEG4Writer(2166): Received total/0-length (123/1) buffers and encoded 123 frames. - video
10-21 10:39:40.740: D/MPEG4Writer(2166): Stopping Video track source
10-21 10:39:40.740: D/MPEG4Writer(2166): Video track stopped
10-21 10:39:40.740: D/MPEG4Writer(2166): Stopping writer thread
10-21 10:39:40.740: D/MPEG4Writer(2166): 0 chunks are written in …
Run Code Online (Sandbox Code Playgroud)

mp4 android muxer mediacodec

11
推荐指数
2
解决办法
1万
查看次数

如何使用MediaCodec修剪视频

我正在尝试使用MediaProjection API记录屏幕。我想修剪媒体投影录制的视频。有没有不使用任何第三方依赖项的方法?

android mediamuxer android-mediaprojection android-mediacodec

1
推荐指数
1
解决办法
2255
查看次数