MediaCodec使用连接RTSP服务器拍照大小只有128kb大小问题
来源:互联网 发布:社交数据库设计 编辑:程序博客网 时间:2024/05/14 21:36
MediaCodec是Android提供的标准编解码API,由于之前接触流媒体这块不多,项目需要,查了一个MediaCodec关于的使用方式,之后后开始用起来。项目场景是这样子的,使用手机连接全景相机rtsp采集时时流数据,客户端使用VCL接受数据,同时手机端可以通过app可以开启、关闭流播、拍照、录像等操作,由于拍照的图片所需要的质量要求比较高,需要4k或者是更高的6K,故不能采用采用时时里面的数据帧来保存为图片,而项目需要必须要求时时打开流播,这就涉及到必须拍照或者是录像的同时必须先今掉流播,再启动拍照或者是录像。
在流播的时候,开启一个生产线程不断的生产数据,从Camera里面得到数据,再把得到的数据传送给底层opengl渲染,时时拼接,再把编码过后的ByteBuffer传送给live555,
点击拍照,然后再开启流播会发现一个很奇怪的问题,最开始切换成功以后,拍照都成功,后面拍照4k大小只有128kb,百思不得奇解。最后通过分析,原来是使用MediaCodec没有释放索引缓冲区。
找到问题的原因呢,当然会有解决办法,我的解决办法是开启一个消费线程,代码如下;
private Runnable VideoMuxerRunnable = new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
ESLog.d(TAG, "video muxer thread runnable start");
// if(mInit){
setVideoMuxerRunning(true);
ESLog.d(TAG, " VideoMuxerRunnable start ");
int bufferIndex = -1;
BufferInfo mBufferInfo = new BufferInfo();
ByteBuffer[] mByteBufferArray = mediaCodec.getOutputBuffers();
ByteBuffer mBuffer = null;
ESLog.d(TAG, "mVideoMuxerRunning>>>>>>>>"+getVideoMuxerRunning());
while (getVideoMuxerRunning() && dataComing) {
//开启流播后,这里的视频生产线程没有起来
bufferIndex = mediaCodec.dequeueOutputBuffer(mBufferInfo,
1000000);// wait 1 seconds,not real wait time
if (bufferIndex >= 0) {
mBuffer = mByteBufferArray[bufferIndex];
mBuffer.position(0);
mediaCodec.releaseOutputBuffer(bufferIndex, false);
// FileLoger.LOGE(TAG, "media code release buffer");
} else if (bufferIndex == MediaCodec.INFO_OUTPUT_BUFFERS_CHANGED) {
mByteBufferArray = mediaCodec.getOutputBuffers();
} else if (bufferIndex == MediaCodec.INFO_OUTPUT_FORMAT_CHANGED) {
// mVideoMediaFormat = mMediaCodec.getOutputFormat();
// MediaFormatComing(mediaCodec.getOutputFormat(), TYPE_VIDEO);
} else if (bufferIndex == MediaCodec.INFO_TRY_AGAIN_LATER) {
// delay
ESLog.d(TAG, "INFO_TRY_AGAIN_LATER");
FileLoger.LOGE(TAG, "media code release buffer");
} else {
ESLog.d(TAG, "unknow bufferindex:" + bufferIndex);
}
}
// }
}
};
释放一下缓冲区就可以了
- MediaCodec使用连接RTSP服务器拍照大小只有128kb大小问题
- 恶意代码--大小约1.2G左右zip压缩包文件用rar解压出来为何只有1.2KB
- Oracle 块大小(默认8KB)
- 存储大小(1KB,1MB)
- 计算字节大小,转换成KB
- IOS 压缩图片到指定大小kb
- 如何改变图片的大小kb
- 解决android-support-v7.jar类不全问题 2016-08-05上传大小:630KB androidv7
- RTSP连接服务器
- Linux服务器使用df和du查看磁盘大小不一致的问题和解决办法
- 使用DrawIcon绘制图标时大小问题
- 使用DrawIcon绘制图标时大小问题
- 使用TypedArray设置控件大小注意问题
- 网站服务器大小选择
- jQuery 1.1.3: 速度提高800%,大小仍然 20KB
- AIX查看文件和目录大小(size)单位是KB
- 返回byte/kb的数据大小对应的文本
- JavaScript 大小转化B KB MB GB等的转化
- 40个Java多线程问题总结
- 免费美图下载网站
- java多态
- C++ 基础
- Java开发环境的搭建
- MediaCodec使用连接RTSP服务器拍照大小只有128kb大小问题
- VisualSVN服务端用文件更改用户权限密码
- 00-C++工程师常见面试大纲汇总
- maven 常用命令
- sublime使用技巧
- Mysql中to_char()和str_to_date()函数
- 报错java.lang.IllegalstateException 解决的的思路
- Android-银联支付开发
- hdu1198 并查集