我写了一个使用MediaCodec和MediaMuxer录制视频的演示。

我用我的演示录制视频并使用ffprobe检查视频,结果如下:

Duration: 00:00:06.86, start: 0.000000, bitrate: 723 kb/s

Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 320x240, 619 kb/s, SAR 1:1 DAR 4:3, 30.02 fps, 30 tbr, 90k tbn, 180k tbc (default)

Metadata:

creation_time : 2015-06-05 13:19:24

handler_name : VideoHandle

Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, mono, fltp, 96 kb/s (default)

Metadata:

creation_time : 2015-06-05 13:19:24

handler_name : SoundHandle

它包含视频和音频信息,我发现音频属性与我在源代码中设置的相同,但视频属性不是很好。 我的视频设置源代码如下:

MediaFormat format = MediaFormat.createVideoFormat(MIME_TYPE, mWidth, mHeight);

format.setInteger(MediaFormat.KEY_COLOR_FORMAT,

MediaCodecInfo.CodecCapabilities.COLOR_FormatSurface);

format.setInteger(MediaFormat.KEY_BIT_RATE, 384000);

format.setInteger(MediaFormat.KEY_FRAME_RATE, 19);

format.setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, 5);

if (VERBOSE) Log.d(TAG, "format: " + format);

mVideoEncoder = MediaCodec.createEncoderByType(MIME_TYPE);

mVideoEncoder.configure(format, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE);

mInputSurface = mVideoEncoder.createInputSurface();

mVideoEncoder.start();

视频的宽度和高度是正确的,但比特率和帧率高于我在源代码中设置的值。 这导致视频文件大小比我预期的要大得多。 然后,我修改了我的源代码以删除录音线程,只记录视频。 但它没有任何差异,比特率和帧率也更高。 谁能告诉我原因并给我一些建议?

还有另一个问题。 我偶尔会录制一个可以由系统播放器播放的损坏视频,但视频的开头只是黑色,1或2秒后显示正常图像。 我不知道如何在stackoverflow中上传文件,我可以将损坏的视频文件发送给任何需要它的人。 有人有这个问题吗?

ADD:我发现了另一个奇怪的事情:我的视频编码配置:

private int mWidth = 480;

private int mHeight = 848;

private int mVideoBitrate = 1200 * 1000;

MediaFormat format = MediaFormat.createVideoFormat(MIME_TYPE, 480, 848);

format.setInteger(MediaFormat.KEY_COLOR_FORMAT,

MediaCodecInfo.CodecCapabilities.COLOR_FormatSurface);

format.setInteger(MediaFormat.KEY_BIT_RATE, 1200000);

format.setInteger(MediaFormat.KEY_FRAME_RATE, 30);

format.setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, 1);

但实际的视频信息是:

Duration: 00:00:06.01, start: 0.000000, bitrate: 6491 kb/s

Stream #0:0(eng): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, mono, fltp, 15 kb/s (default)

Metadata:

creation_time : 2015-09-30 15:44:18

handler_name : SoundHandle

Stream #0:1(eng): Video: h264 (Baseline) (avc1 / 0x31637661), yuv420p, 480x848, 6484 kb/s, SAR 1:1 DAR 30:53, 16 fps, 30 tbr, 90k tbn, 180k tbc (default)

Metadata:

creation_time : 2015-09-30 15:44:18

handler_name : VideoHandle

android 获取视频码率和缓存大小,android - 使用MediaCodec和MediaMuxer录制视频,但比特率和帧率不正确 - 堆栈内存溢出...相关推荐

  1. java pdf 用系统字体大小_java - Java PDFBox设置PDF表单中几个字段的自定义字体 - 堆栈内存溢出...

    使用穷人的大胆 我如何大胆的领域? ......我需要设置哪些大胆的字段? 在PDF中,您通常使用带粗体字形的字体使文本变为粗体,另请参阅第二个问题. 如果你手上没有这么大胆的字体,你可能会使用一些穷 ...

  2. android 获取MP4文件的图片大小

    今天,简单讲讲怎么获取MP4视频的每一帧的图片大小. android使用 MediaMetadataRetriever 获取视频文件的 总时长 和视频的分辨率. 根据该方式获取视频信息可以看出不仅仅可 ...

  3. android requestmtu,android - 如何设置/获取/请求从Android到iOS或反之亦然BLE的MTU? - 堆栈内存溢出...

    我们正在将MTU请求从Android发送到iOS Android-从此函数onServicesDiscovered回调请求MTU 但是我不知道如何确定对等设备支持是否请求了MTU,以及如何实际协商的M ...

  4. Android视频编辑器(一)通过OpenGL预览、录制视频以及断点续录等

    前言 如今的视频类app可谓是如日中天,火的不行.比如美拍.快手.VUE.火山小视频.抖音小视频等等.而这类视频的最基础和核心的功能就是视频录制和视频编辑功能.包括了手机视频录制.美白.加滤镜.加水印 ...

  5. Android 获取App应用、缓存、数据等大小适配8.0(仿微信存储空间)

    一.前言 二.效果预览 三.实现步骤 (1)开启权限 (2)AIDL文件导入 (3)引用工具类 (4)使用方式 四.功能分解 (1)单例模式 (2)设置监听数据获取回调 (3)开始获取数据 五.Dem ...

  6. android 获取hdmi数据格式,一种基于Android系统HDMI同显时节省带宽的方法与流程

    本发明涉及一种基于Android系统HDMI同显时节省带宽的方法,属于计算机领域. 背景技术: 通常很多移动设备都配备了小尺寸的LCD屏幕,有些使用场景为了能提供更好的交互控制操作,需要移动设备在大尺 ...

  7. android 获取第三方应用程序包名并启动,android 获取第三方应用程序包名并启动...

    效果图: 说明: 第一行:应用程序名称 第二行:应用程序包名 第三行:应用程序入口Activity名称 代码如下: packagecom.hello.project; importjava.util. ...

  8. android获取存储设备根目录,浅谈android获取存储目录(路径)的几种方式和注意事项...

    通常, 我们创建文件/目录, 或者存储图片什么的, 我们都需要拿到手机的存储路径, 现在我们就来看一下获取手机存储路径的几种方式(作为工具类方法调用即可): 第一种: 获取 /storage/emul ...

  9. android获取spinner的值_在Android的Spinner中实现键值对的正确方法是什么

    这是在Android中为Spinner实现键值对的正确方法吗? package com.mypackage import android.app.Activity; import android.os ...

  10. android ffmpeg 编码h264,android - ffmpeg for android,编码h264内存不足 - 堆栈内存溢出

    在android上用ffmpeg编码视频时出现奇怪的错误 Failed to inject frame into filter network: Out of memory Althoug是一个非常客 ...

最新文章

  1. PHP isset()与empty()的使用区别详解
  2. 多进程python_python -- 多进程
  3. 使用SAP WebIDE进行SAP Cloud Platform Business Application开发
  4. java人种_Java面向对象练习题继承之人种
  5. Android屏幕大小适配问题解决
  6. E - Tautology(永真式)
  7. Mysql Can't connect to MySQL server
  8. Mybatis 系列使用记录
  9. Queue与生产者消费者模型
  10. mysql 测试数据生成器_测试数据生成器
  11. c语言 自适应模式算术编码,算术压缩论文基于算术编码的数据压缩算法研究与实现.doc...
  12. 语音识别行业技术和市场横向对比
  13. 也致第一次安装Rime的你
  14. 即时通讯软件到底有哪些呢?
  15. linux的常用命令
  16. Onedrive创建软链接同步指定文件夹
  17. 【C/C++】标准库之 numeric
  18. c-lodop自定义分页打印
  19. linux修改arena大小,Resolume Arena怎么设置大屏幕 调整画面屏幕的方法
  20. 【编程】shell和python实现:如何做到让一个程序每1秒去做一件事情

热门文章

  1. 什么牌子真无线蓝牙耳机适合运动,高续航舒适小巧这五款蓝牙耳机不要错过
  2. 自己制作 XP With SP3 系统光盘 包括驱动SATA集成AHCI驱动
  3. 【毕设教程】python区块链实现 - proof of work工作量证明共识算法
  4. Discuz deleterow函数解析
  5. 杜凯杰教学数据分析:python 图片爬取 爬取各校校花图片
  6. 04树莓派迅雷远程下载
  7. BUUCTF misc 专题(82)[WUSTCTF2020]alison_likes_jojo
  8. 远程移动测试平台对比分析
  9. Google 创始人
  10. pause、who、whos命令,Matlab中存储实数的形式总结,format两个命令