谢谢你的关注!我想使用Android MediaCodec API对从Camera获取的视频帧进行编码,遗憾的是,我没有成功做到这一点!我仍然不熟悉MediaCodec API.以下是我的代码,我需要你的帮助来弄清楚我应该做什么.
1,相机设置:
Parameters parameters = mCamera.getParameters();
parameters.setPreviewFormat(ImageFormat.NV21);
parameters.setPreviewSize(320, 240);
mCamera.setParameters(parameters);
Run Code Online (Sandbox Code Playgroud)
2,设置编码器:
private void initCodec() {
try {
fos = new FileOutputStream(mVideoFile, false);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
mMediaCodec = MediaCodec.createEncoderByType("video/avc");
MediaFormat mediaFormat = MediaFormat.createVideoFormat("video/avc",
320,
240);
mediaFormat.setInteger(MediaFormat.KEY_BIT_RATE, 125000);
mediaFormat.setInteger(MediaFormat.KEY_FRAME_RATE, 15);
mediaFormat.setInteger(MediaFormat.KEY_COLOR_FORMAT,
MediaCodecInfo.CodecCapabilities.COLOR_FormatYUV420Planar);
mediaFormat.setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, 5);
mMediaCodec.configure(mediaFormat,
null,
null,
MediaCodec.CONFIGURE_FLAG_ENCODE);
mMediaCodec.start();
inputBuffers = mMediaCodec.getInputBuffers();
outputBuffers = mMediaCodec.getOutputBuffers();
}
private void encode(byte[] data) {
int inputBufferIndex = mMediaCodec.dequeueInputBuffer(0);
if (inputBufferIndex >= 0) {
ByteBuffer inputBuffer = inputBuffers[inputBufferIndex];
inputBuffer.clear(); …Run Code Online (Sandbox Code Playgroud) 我正在使用Android MediaCodec API来解码h264帧.我可以在视图上解码和渲染帧.我的问题是解码器错过了很多帧,特别是前几帧.DecodeMediaCodec.dequeueOutputBuffer()返回-1.a约150 h264帧,刚解码43帧.我找不到问题所在.这是我的代码.
/**
* init decoder
*/
private void initDecodeMediaCodec()
{
mDecodeMediaCodec = MediaCodec.createDecoderByType(MIME_TYPE);
MediaFormat format = MediaFormat.createVideoFormat(MIME_TYPE,
VIDEO_WIDTH_640,
VIDEO_HEIGHT_480);
mDecodeMediaCodec.configure(format,
new Surface(mRemoteVideoView.getSurfaceTexture()),
null,
0);
mDecodeMediaCodec.start();
mDecodeInputBuffers = mDecodeMediaCodec.getInputBuffers();
System.out.println("decode-----"
+ mDecodeMediaCodec.getCodecInfo().getName());
}
Run Code Online (Sandbox Code Playgroud)
解码器初始化后,我将启动解码器线程.
/**
*
* @param frameData
*/
private void decode()
{
new Thread(new Runnable()
{
@Override
public void run()
{
while (true)
{
ByteBuffer decodeDataBuffer = null;
try
{
//take h264 frame from cache queue
decodeDataBuffer = decodeDataQuene.take();
}
catch (InterruptedException e)
{ …Run Code Online (Sandbox Code Playgroud) 如何获取文件夹的子文件而不删除已删除的文件,我的代码如下:
Children children = service.children();
Drive.Children.List request = children.list("root");
do
{
try
{
ChildList cList = request.execute();
for (ChildReference cr : cList.getItems())
{
File file = service.files().get(cr.getId()) .execute();
System.out.println(file.getTitle() + "--"+ file.getMimeType());
}
request.setPageToken(cList.getNextPageToken());
}
catch (IOException e)
{
System.out.println("An error occurred: " + e);
request.setPageToken(null);
}
} while (request.getPageToken() != null && request.getPageToken().length() > 0);
Run Code Online (Sandbox Code Playgroud) 我将使用Android MediaCodec解码h264视频流,我想知道如何做到这一点.提前致谢!