社区
Android
帖子详情
Android使用MediaCodec进行h264硬编码的问题
saliengu
2015-11-03 05:23:02
每次运行到 mediaCodec.configure(mediaFormat, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE); 这句总会报异常,不知道哪位大神碰到过这种问题,跪求指点。
...全文
598
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
格式
本文主要介绍如何通过Camera一帧一帧的获取画面,并通过
MediaCodec
硬编码
方式编码成
H264
格式的视频数据,希望对想了解
MediaCodec
的你能够有所帮助。
android
摄像头h265编码,
Android
Camera2
硬编码
步骤与分析:步骤如下一、二、三。有些网友可能会问为什么要走这些步骤。笔者给你一一道来。首先采集的数据不管你手机是横屏还是竖屏你拿到的数据都是横屏。所以如果你是竖屏显示画面你需要旋转90度或者-90度、横屏则不需要。第二如果你编码
使用
的是软编码比如ffmpeg的话你可以不转换格式但是你会发现手机cpu
使用
到80%左右或者更高。此时你会考虑选择
使用
硬编码
。既然你选择
硬编码
那么系统默认让你传入的格式就是...
Android
InstantVideo入门教程:5分钟搭建
Android
视频
硬编码
环境
想要快速掌握
Android
视频
硬编码
技术吗?🤔
Android
InstantVideo项目为你提供了一个完美的起点!这个开源项目展示了
Android
硬编码
下的视频数据流动,支持视频处理(如加滤镜、加水印)和RTMP直播推流功能。无论你是
Android
开发新手还是想要深入了解视频编码的开发者,这篇教程都将带你快速上手。 ## 📱 项目简介与核心功能
Android
InstantVideo是一
Android
InstantVideo错误排查:解决
MediaCodec
常见
问题
的8个方法
Android
InstantVideo是一个展示
Android
硬编码
视频数据流动的开源项目,它能够实现视频处理、滤镜添加、水印叠加以及RTMP直播推流功能。在
使用
Android
硬编码
进行
视频处理时,
MediaCodec
是开发者最常遇到的挑战之一,本文将为您介绍8个解决
MediaCodec
常见
问题
的实用方法。😊 ## 1.
MediaCodec
初始化失败排查
MediaCodec
初始化失败是最
red5 + rtmp篇2
6.1 调研,测试视频服务器: live555, easy darwin, red5,crtmpserver,因为不但需要视频直播,还需要录制视频流,需要现成的,以及red5是有apache在维护,持续更新,所以选择red5 6.2 视频推送
android
客户端 6.2.1 了解rtmp协议后,发现server需要录制视频流,客户端需要以“record”模式推送,了解完之后
Android
80,490
社区成员
91,375
社区内容
发帖
与我相关
我的任务
Android
移动平台 Android
复制链接
扫一扫
分享
社区描述
移动平台 Android
android
android-studio
androidx
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章