标签: mp4parser

根据使用的相机使用mp4parser旋转视频

基本上我想旋转视频,取决于使用哪个相机拍摄它.

前置摄像头镜像为90度,后置摄像头显示正常.目前它将根据第一个剪辑设置Matrix.如果第一个剪辑是使用前置摄像头制作的,它会将所有剪辑旋转到270度,反之亦然.

这是一个示例代码(rotations是一个包含剪辑旋转的ArrayList):

for (TrackBox trackBox : trackBoxes) {
       Log.d("TRACKBOX", String.valueOf(rotations.get(i)));
       //trackBox.getTrackHeaderBox().setMatrix(Matrix.ROTATE_90);
       if (rotations.get(i) == 90) { //if clip was made with back camera
              trackBox.getTrackHeaderBox().setMatrix(Matrix.ROTATE_90);
              Log.d("Rotating to:", "90 degrees");

       } else if (rotations.get(i) == 270) { // if clip was made with front camera
              trackBox.getTrackHeaderBox().setMatrix(Matrix.ROTATE_270);
              Log.d("Rotating to:", "270 degrees");
       }
       m.addTrack(new Mp4TrackImpl(trackBox));

}
inMovies[i] = m;
Run Code Online (Sandbox Code Playgroud)

java camera android rotation mp4parser

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

java.io.IOException:无法在使用Mp4Parser合并视频中合并AudioSampleEntry

我一直在合并两个视频。我正在从手机存储中提取视频,并以字符串形式传递它们。然后这些视频被合并。我已经看到,如果我要合并从摄像机拍摄的视频,那么它工作正常,合并进行得很好。但是,一旦获取并尝试合并其他视频文件,就会引发异常

java.io.IOException: Cannot merge AudioSampleEntry{bytesPerSample=0, bytesPerFrame=0, bytesPerPacket=0, samplesPerPacket=0, packetSize=0, compressionId=0, soundVersion=0, sampleRate=24000, sampleSize=16, channelCount=2, boxes=[com.googlecode.mp4parser.boxes.mp4.ESDescriptorBox@fffffab7]} and AudioSampleEntry{bytesPerSample=0, bytesPerFrame=0, bytesPerPacket=0, samplesPerPacket=0, packetSize=0, compressionId=0, soundVersion=0, sampleRate=22050, sampleSize=16, channelCount=2, boxes=[com.googlecode.mp4parser.boxes.mp4.ESDescriptorBox@fffff9fb]} 08-22 15:59:03.347 27476-27558/in.pinelane.myhovi W/System.err: at com.googlecode.mp4parser.authoring.tracks.AppendTrack.mergeStsds(AppendTrack.java:116) 08-22 15:59:03.347 27476-27558/in.pinelane.myhovi W/System.err: at com.googlecode.mp4parser.authoring.tracks.AppendTrack.<init>(AppendTrack.java:59)
Run Code Online (Sandbox Code Playgroud)

并且不会在存储设备中保存任何文件。另外,如果视频的高度不同,那么它会给我这个例外,并且也不会保存任何文件

E/isoparser: AppendTrack:height differs
Run Code Online (Sandbox Code Playgroud)

这是我的活动,您可以看到以下代码:

//asynch task to merge the videos in background
    class MergeVideos extends AsyncTask<ArrayList<File>, Integer, String>{

        @Override
        protected String doInBackground(ArrayList<File>... params) {
                ArrayList<Movie> inMovies = new ArrayList<>();
                for(File file : params[0]){
                    Movie movie = MovieCreator.build(file.getAbsolutePath());
                    inMovies.add(movie);
                }

                List<Track> …
Run Code Online (Sandbox Code Playgroud)

video merge android mp4parser

5
推荐指数
0
解决办法
320
查看次数

通过使用带有内存限制的com.googlecode.mp4parser添加轨道来从文件创建影片?

我有多个文件的录音.我正在使用com.googlecode.mp4parser:isoparser:1.0.2库创建一个连续的音频文件.

以下是我的代码:

String mediaKey = isAudio ? "soun" : "vide";
                List<Movie> listMovies = new ArrayList<>();
                for (String filename : sourceFiles) {
                    listMovies.add(MovieCreator.build(filename));
                }
                List<Track> listTracks = new LinkedList<>();
                for (Movie movie : listMovies) {
                    for (Track track : movie.getTracks()) {
                        if (track.getHandler().equals(mediaKey)) {
                            listTracks.add(track);
                        }
                    }
                }
                Movie outputMovie = new Movie();
                if (!listTracks.isEmpty()) {
                    outputMovie.addTrack(new AppendTrack(listTracks.toArray(new Track[listTracks.size()])));
                }
                Container container = new DefaultMp4Builder().build(outputMovie);
FileChannel fileChannel = new RandomAccessFile(String.format(targetFile), "rw").getChannel();
                container.writeContainer(fileChannel);
                fileChannel.close();
Run Code Online (Sandbox Code Playgroud)

以上代码在Android手机上运行.由于其移动环境,每个应用程序都有内存限制.

上面代码的问题是当我从文件加载Movie并为小文件创建一个轨道列表时它工作正常.但随着文件大小的增加,操作开始变得无响应.它需要大量的内存.如何才能提高内存效率.他们是否可以像在Java中进行文件复制操作那样在小流中执行此操作?

更新: 为了在文件中录制音频,我使用androidMediaRecorder进行此操作,输出格式为 …

android movie android-memory mp4parser

5
推荐指数
0
解决办法
482
查看次数

是mp4parser java库有android版本

我正在尝试在android中使用mp4parser库,我遇到了一些困难.我猜它是因为mp4parser是一个基于java的项目,还没有适应android.

PS-mp4parser在世界范围内传播,甚至被Instagram使用

我的结论基于以下代码:

 public PropertyBoxParserImpl(String... customProperties) {
    InputStream is = getClass().getResourceAsStream("/assets/isoparser-default.properties");
    mapping = new Properties();
    try {
        mapping.load(is);
        Enumeration<URL> enumeration = Thread.currentThread().getContextClassLoader().getResources("isoparser-custom.properties");

        while (enumeration.hasMoreElements()) {
            URL url = enumeration.nextElement();
            mapping.load(url.openStream());
        }
        for (String customProperty : customProperties) {
            mapping.load(getClass().getResourceAsStream(customProperty));
        }
    } catch (IOException e) {
        throw new RuntimeException(e);
    }
}
Run Code Online (Sandbox Code Playgroud)

isoparser-default.properties是一个reflaction映射:

hint=com.coremedia.iso.boxes.TrackReferenceTypeBox(type)
cdsc=com.coremedia.iso.boxes.TrackReferenceTypeBox(type)
meta-ilst=com.coremedia.iso.boxes.apple.AppleItemListBox()
-----name=com.coremedia.iso.boxes.apple.AppleNameBox()
-----mean=com.coremedia.iso.boxes.apple.AppleMeanBox()
-----data=com.coremedia.iso.boxes.apple.AppleDataBox()
rmra=com.coremedia.iso.boxes.apple.AppleReferenceMovieBox()
rmda=com.coremedia.iso.boxes.apple.AppleReferenceMovieDescriptorBox()
rmdr=com.coremedia.iso.boxes.apple.AppleDataRateBox()
rdrf=com.coremedia.iso.boxes.apple.AppleDataReferenceBox()
Run Code Online (Sandbox Code Playgroud)

在android中你不能发起一个带有本地类和mehod的链接的url并像上面的PropertyBoxParserImpl()那样加载它.

所以我猜我只需要改变以下功能,有没有人在使用mp4parser时遇到这些问题?

android mp4parser

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

我怎么知道mp4盒子的avc3的结构?

我有一些分析 mp4 流的工具,例如 Mp4 Explorer、MP4 Reader 和 mp4viewer(通过 python)。他们都不能显示 avc3 有什么结构但我可以看到 avc1。所以我一直在寻找来自 ISO-ISE 14496-12、QuickTime 格式(来自苹果的文档)的 avc3 并找到 avc1 和 avcC。在搜索时,使用 demuxer 之类的东西的人留下了一条提交消息,例如“现在支持 avc3 的 mp4 框”。但这就是全部:( 我在哪里可以找到和查看参考文档?

有人知道avc3吗?

mp4 mp4parser

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

mp4parser - 如何开始使用?

我想按顺序合并多个视频并使用mp4parser获取一个视频 ,但无法开始使用它...我在文件 gradle 中添加了 -implementation 'org.mp4parser:isoparser:1.9.27' 按照示例,无法找到

电影()

然后我意识到我需要添加插件aspectj-rt.jar,但找不到它的最新信息

请帮我解决这个问题。我在网络中看到许多开发人员成功地使用这个库来处理视频文件。但没有任何地方有关于如何开始使用 mp4parser 的信息。

android aspectj-maven-plugin mp4parser

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