我想调用一个函数并从图像列表中构建一个视频,然后将其本地保存在设备上:
public void CreateAndSaveVideoFile(List<Bitmap> MyBitmapArray)
{
// ..
}
Run Code Online (Sandbox Code Playgroud)
试验:
在java/xuggle之后 - 将图像数组编码为电影,答案中的链接是一个死链接
以下如何通过编程将图像编码为Java视频文件?,接受的答案中建议的库不支持Android.
上面的下一个答案有针对Android用户的方法,但我不清楚该功能的输入和输出(他在哪里提供图像?他在哪里获得视频?) - 我留下了一个问题评论
上面的下一个答案提供了一个完整的类,但是要包含的所需库有一个损坏的文件(当我尝试从提供的链接下载它时) - 我留下了一个问题评论
遵循Java:如何从图像数组创建电影?,顶部答案中建议的库使用我不熟悉的命令,我甚至不知道如何使用它们.喜欢:
从当前目录中的所有JPEG文件创建MPEG-4文件:
mencoder mf://*.jpg -mf w=800:h=600:fps=25:type=jpg -ovc lavc \ -lavcopts vcodec=mpeg4:mbd=2:trell -oac copy -o output.avi
我不知道如何在Java/Android项目中使用上述内容.
任何人都可以帮助指导我或/并为我提供一个方法来完成我的任务吗?提前致谢.
我正在尝试将MediaCodec一系列图像(保存为文件中的字节数组)保存到视频文件中.我已经测试了这些图像SurfaceView(在系列中播放),我可以看到它们很好.我看了很多使用的例子MediaCodec,这是我理解的(如果我错了请纠正我):
从MediaCodec对象获取InputBuffers - >用你的帧的图像数据填充它 - >将输入缓冲区排队 - >获取编码输出缓冲区 - >将其写入文件 - >增加显示时间并重复
但是,我已经对此进行了很多测试,最终我遇到了两种情况之一:
queueInputBuffer在第二次调用时导致Media服务器死机.codec.flush()在最后调用(在将输出缓冲区保存到文件之后,虽然我看到的所有示例都没有这样做)并且媒体服务器没有死,但是,我无法使用任何媒体播放器打开输出视频文件,所以出了点问题.这是我的代码:
MediaCodec codec = MediaCodec.createEncoderByType(MIMETYPE);
MediaFormat mediaFormat = null;
if(CamcorderProfile.hasProfile(CamcorderProfile.QUALITY_720P)){
mediaFormat = MediaFormat.createVideoFormat(MIMETYPE, 1280 , 720);
} else {
mediaFormat = MediaFormat.createVideoFormat(MIMETYPE, 720, 480);
}
mediaFormat.setInteger(MediaFormat.KEY_BIT_RATE, 700000);
mediaFormat.setInteger(MediaFormat.KEY_FRAME_RATE, 10);
mediaFormat.setInteger(MediaFormat.KEY_COLOR_FORMAT, MediaCodecInfo.CodecCapabilities.COLOR_FormatYUV420SemiPlanar);
mediaFormat.setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, 5);
codec.configure(mediaFormat, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE);
codec.start();
ByteBuffer[] inputBuffers = codec.getInputBuffers();
ByteBuffer[] outputBuffers = codec.getOutputBuffers();
boolean sawInputEOS = false;
int inputBufferIndex=-1,outputBufferIndex=-1;
BufferInfo info=null;
//loop …Run Code Online (Sandbox Code Playgroud) 我尝试为"audio/3gpp"创建编码器,我的应用程序崩溃...
我用这个代码
String mMime = "audio/3gpp";
MediaCodec mMediaCodec = MediaCodec.createEncoderByType(mMime);
MediaFormat mMediaFormat = MediaFormat.createAudioFormat(mMime, RECORDER_SAMPLERATE, 1);
mMediaCodec.configure(mMediaFormat, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE);
mMediaCodec.start();
Run Code Online (Sandbox Code Playgroud)
位于com.agent.mobile.TestAppActivity.initMediaCodec(TestAppActivity.java:234)的android.media.MediaCodec.configure(MediaCodec.java:256) 中的异常
java.lang.IllegalStateException
android.media.MediaCodec.native_configure(Native Method )