我正在使用mp4parser,视频需要属于同一类型。 我正在考虑使用Android的媒体编解码器解码&编码预卷视频以适应相机的相同编码输出(正面和背面) 关于如何做到这一点的任何建议(如何获得特定的设备编码参数)?
答案 0 :(得分:0)
如果您想了解Android相机使用的编码,请尝试使用:https://developer.android.com/reference/android/media/CamcorderProfile
这应该足以回答您检测视频编码的问题,包括:文件输出格式,视频编解码器格式,视频比特率,以每秒位数为单位,视频帧速率,以每秒帧数,视频帧宽度和高度,音频编解码器格式,音频比特率,以每秒位数为单位,音频采样率录制的音频通道数。
从这里也提取了很多上述信息:https://developer.android.com/guide/topics/media/camera#capture-video
至于转码已经在用户名下的视频,我发现这个有用的转码器是使用Android MediaCodec API在纯java中编写的,可以在这里找到:https://github.com/ypresto/android-transcoder
另外,正如下面提到的rupps,你可以使用ffmeg,它被证明可以在Android上无数次运行。然而,我首先链接其他代码转换器的原因是,正如作者所述," FFmpeg是最着名的代码转换解决方案。但在Android上使用FFmpeg二进制文件可能会导致GPL和/或专利问题。由于交叉编译,架构兼容性,构建时间和二进制大小,使用本机代码进行Android开发也很麻烦。"因此,请使用您认为更适合您的人。以下是适用于Android的ffmeg的链接: https://github.com/WritingMinds/ffmpeg-android
如果您不想使用其他人制作的代码转换器,那么我建议您使用可在此处找到的MediaCodec API制作您自己的代码转换器:https://developer.android.com/reference/android/media/MediaCodec
答案 1 :(得分:0)
如果你想要魔术,试试这个库。
https://github.com/INDExOS/media-for-mobile/
查看MediaComposer类。
这里还有关于它是如何完成的代码片段。
org.m4m.MediaComposer mediaComposer = new org.m4m.MediaComposer(factory, progressListener);
mediaComposer.addSourceFile(mediaUri1);
int orientation = mediaFileInfo.getRotation();
mediaComposer.setTargetFile(dstMediaPath, orientation);
// set video encoder
VideoFormatAndroid videoFormat = new VideoFormatAndroid(videoMimeType, width, height);
videoFormat.setVideoBitRateInKBytes(videoBitRateInKBytes);
videoFormat.setVideoFrameRate(videoFrameRate);
videoFormat.setVideoIFrameInterval(videoIFrameInterval);
mediaComposer.setTargetVideoFormat(videoFormat);
// set audio encoder
AudioFormatAndroid aFormat = new AudioFormatAndroid(audioMimeType, audioFormat.getAudioSampleRateInHz(), audioFormat.getAudioChannelCount());
aFormat.setAudioBitrateInBytes(audioBitRate);
aFormat.setAudioProfile(MediaCodecInfo.CodecProfileLevel.AACObjectLC);
mediaComposer.setTargetAudioFormat(aFormat);
mediaComposer.setTargetFile(dstMediaPath, orientation);
mediaComposer.start();