社区
Android
帖子详情
Android使用MediaCodec进行h264硬编码的问题
saliengu
2015-11-03 05:23:02
每次运行到 mediaCodec.configure(mediaFormat, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE); 这句总会报异常,不知道哪位大神碰到过这种问题,跪求指点。
...全文
586
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; } 这是我在网上找的改了下,希望可以帮到你
EasyPusher安卓
Android
手机直播推送之
MediaCodec
硬编码
H264
格式
本文介绍了
使用
EasyPusher在
Android
上实现手机直播推送,通过
MediaCodec
进行
H264
视频流的
硬编码
。讨论了
MediaCodec
在不同手机上的适配
问题
,提供了
MediaCodec
Demo的下载链接,展示从Camera获取NV21数据,转换为YUV420P并编码成
H264
的流程。
android
摄像头h265编码,
Android
Camera2
硬编码
本文详细介绍了如何在
Android
上
使用
Camera2 API
进行
H265视频编码,包括摄像头数据的旋转、格式转换及
MediaCodec
硬编码
过程,以解决CPU高占用
问题
。通过旋转YUV420P数据,转换为NV12格式,然后利用
MediaCodec
进行
H264
编码,同时处理关键帧信息,确保视频的正确播放。
red5 + rtmp篇2
本文分享了
使用
不同服务器
进行
视频直播及录制的调研过程,重点介绍了基于
Android
平台实现视频推流的技术细节,包括RTMP协议的应用、视频编码、打包及推送等关键步骤。
Android
MediaCodec
硬编码
H264
文件
本文详细介绍了如何
使用
Android
的
MediaCodec
进行
H264
视频的
硬编码
,包括
MediaCodec
的工作流程、MediaFormat的设置以及编解码操作。通过实例展示了如何处理输入输出缓冲区,实现YUV数据的转换和编码,最终将编码后的数据写入文件。
MediaCodec
硬编码
成
H264
视频流
本文介绍了如何利用
Android
的
MediaCodec
类将原始视频数据
硬编码
为
H264
格式的流。在屏幕录制场景下,通过创建输入Surface并将数据传入
MediaCodec
进行
编码。编码过程中,
MediaCodec
的前两帧是sps和pps,用于配置解码器。文章还展示了实时编码后通过socket传输的代码片段。
Android
80,488
社区成员
91,379
社区内容
发帖
与我相关
我的任务
Android
移动平台 Android
复制链接
扫一扫
分享
社区描述
移动平台 Android
android
android-studio
androidx
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章