社区
Android
帖子详情
Android使用MediaCodec进行h264硬编码的问题
saliengu
2015-11-03 05:23:02
每次运行到 mediaCodec.configure(mediaFormat, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE); 这句总会报异常,不知道哪位大神碰到过这种问题,跪求指点。
...全文
564
2
打赏
收藏
Android使用MediaCodec进行h264硬编码的问题
每次运行到 mediaCodec.configure(mediaFormat, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE); 这句总会报异常,不知道哪位大神碰到过这种问题,跪求指点。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
2 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
aawc1144
2015-11-30
打赏
举报
回复
楼上无敌,谢谢指教
zhouxionger
2015-11-06
打赏
举报
回复
private MediaCodec mediaCodec; int m_width; int m_height; byte[] m_info = null; int key; private String type = "video/avc"; @SuppressLint("NewApi") public AvcEncoder(int width, int height, int framerate, int bitrate) { m_width = width; m_height = height; mediaCodec = MediaCodec.createEncoderByType(type); MediaFormat mediaFormat = MediaFormat.createVideoFormat(type, width, height); mediaFormat.setInteger(MediaFormat.KEY_BIT_RATE, bitrate); mediaFormat.setInteger(MediaFormat.KEY_FRAME_RATE, framerate); mediaFormat.setInteger(MediaFormat.KEY_COLOR_FORMAT, MediaCodecInfo.CodecCapabilities.COLOR_FormatYUV420SemiPlanar); mediaFormat.setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, 10); mediaCodec.configure(mediaFormat, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE); mediaCodec.start(); } @SuppressLint("NewApi") public void close() { try { mediaCodec.stop(); mediaCodec.release(); } catch (Exception e) { e.printStackTrace(); } } @SuppressLint("NewApi") public byte[] offerEncoder(byte[] input) { int count = 0; byte[] output = null; int pos = 0; // swapYV12toI420(input, yuv420, m_width, m_height); try { ByteBuffer[] inputBuffers = mediaCodec.getInputBuffers(); Log.i("inputBufferssize", "" + inputBuffers.length); ByteBuffer[] outputBuffers = mediaCodec.getOutputBuffers(); int inputBufferIndex = mediaCodec.dequeueInputBuffer(0); Log.i("AvcEncoder inputBufferIndex", inputBufferIndex + ""); if (inputBufferIndex >= 0) { ByteBuffer inputBuffer = inputBuffers[inputBufferIndex]; inputBuffer.clear(); inputBuffer.put(input); mediaCodec.queueInputBuffer(inputBufferIndex, 0, input.length, 0, 0); } MediaCodec.BufferInfo bufferInfo = new MediaCodec.BufferInfo(); int outputBufferIndex = 0; while (count <= 10) { outputBufferIndex = mediaCodec.dequeueOutputBuffer(bufferInfo, 10000); Log.i("AvcEncoder outputBufferIndex", outputBufferIndex + ""); if (outputBufferIndex == -1) { count++; } else { break; } } if (outputBufferIndex >= 0) { ByteBuffer outputBuffer = outputBuffers[outputBufferIndex]; byte[] outData = new byte[bufferInfo.size]; // Log.i("h264.size", outData.length + ""); output = new byte[outData.length]; outputBuffer.get(outData); if (m_info != null) { System.arraycopy(outData, 0, output, pos, outData.length); pos += outData.length; } else { ByteBuffer spsPpsBuffer = ByteBuffer.wrap(outData); if (spsPpsBuffer.getInt() == 0x00000001) { m_info = new byte[outData.length];// 第一帧数据 System.arraycopy(outData, 0, m_info, 0, outData.length); } } mediaCodec.releaseOutputBuffer(outputBufferIndex, false); mediaCodec.flush(); } int key = output[4] & 0x1F; if (key == 5) // key frame2 { System.arraycopy(output, 0, input, 0, pos); output = new byte[output.length + m_info.length]; System.arraycopy(m_info, 0, output, 0, m_info.length); System.arraycopy(input, 0, output, m_info.length, pos); pos += m_info.length; } } catch (Throwable t) { t.printStackTrace(); } return output; } 这是我在网上找的改了下,希望可以帮到你
android
MediaCodec
实现
h264
硬编解码全过程
MediaCodec
实现
h264
硬编解码全过程,视频数据从摄像头读出 yv12格式,转换为I420,投递给encoder,再从encoder取出编码后的
h264
数据投递给decoder后显示到surfaceView; 实现了udp将
h264
数据发送到指定主机,可通过...
Android
使用
MediaCodec
将摄像头采集的视频编码为
h264
Android
使用
MediaCodec
将摄像头采集的视频编码为
h264
Android
平台上,
MediaCodec
是
Android
4.1(Jelly Bean)引入的一个新的多媒体编码解码器框架,它提供了一个统一的接口来访问各种硬件编码器和解码器。...
Android
MediaCodec
硬解码
H264
在本文中,我们将深入探讨如何
使用
MediaCodec
进行
H264
视频的硬解码,这是一个高效的处理方式,因为它利用了设备硬件加速的能力。 1. **
Android
MediaCodec
介绍**
Android
MediaCodec
是系统服务的一部分,它为应用...
android
6.0
MediaCodec
H.264解码测试
本篇文章将深入探讨在
Android
6.0上
使用
MediaCodec
进行
H.264视频流的硬解码测试,以及如何在不同硬件平台上确保其兼容性和稳定性。 首先,我们要理解什么是H.264。H.264,也称为AVC(Advanced Video Coding),是一...
Android
MediaCodec
RTSP
H264
播放器客户端
本文将深入探讨如何在
Android
上构建一个
使用
MediaCodec
进行
硬解码的RTSP
H264
播放器客户端。
MediaCodec
是
Android
系统提供的一个低级别的硬件加速解码和编码API,它可以有效地处理各种视频和音频格式,包括
H264
。...
Android
80,481
社区成员
91,373
社区内容
发帖
与我相关
我的任务
Android
移动平台 Android
复制链接
扫一扫
分享
社区描述
移动平台 Android
android
android-studio
androidx
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章