FMUSER更轻松地传输视频和音频!
es.fmuser.org
it.fmuser.org
fr.fmuser.org
de.fmuser.org
af.fmuser.org ->荷兰语
sq.fmuser.org ->阿尔巴尼亚人
ar.fmuser.org ->阿拉伯语
hy.fmuser.org - >亚美尼亚
az.fmuser.org ->阿塞拜疆
eu.fmuser.org ->巴斯克
be.fmuser.org ->白俄罗斯语
bg.fmuser.org - >保加利亚
ca.fmuser.org ->加泰罗尼亚语
zh-CN.fmuser.org ->中文(简体)
zh-TW.fmuser.org - >中国(繁体)
hr.fmuser.org ->克罗地亚语
cs.fmuser.org ->捷克
da.fmuser.org ->丹麦语
nl.fmuser.org - >荷兰
et.fmuser.org ->爱沙尼亚语
tl.fmuser.org ->菲律宾
fi.fmuser.org ->芬兰语
fr.fmuser.org - >法国
gl.fmuser.org ->加利西亚语
ka.fmuser.org ->乔治亚
de.fmuser.org ->德语
el.fmuser.org - >希腊
ht.fmuser.org ->海地克里奥尔语
iw.fmuser.org ->希伯来语
hi.fmuser.org ->印地语
hu.fmuser.org - >匈牙利
is.fmuser.org ->冰岛语
id.fmuser.org ->印尼语
ga.fmuser.org ->爱尔兰
it.fmuser.org - >意大利
ja.fmuser.org ->日语
ko.fmuser.org ->韩文
lv.fmuser.org ->拉脱维亚
lt.fmuser.org - >立陶宛
mk.fmuser.org ->马其顿语
ms.fmuser.org ->马来语
mt.fmuser.org ->马耳他语
no.fmuser.org - >挪威
fa.fmuser.org ->波斯语
pl.fmuser.org ->波兰语
pt.fmuser.org ->葡萄牙语
ro.fmuser.org - >罗马尼亚
ru.fmuser.org ->俄语
sr.fmuser.org ->塞尔维亚语
sk.fmuser.org ->斯洛伐克
sl.fmuser.org - >斯洛文尼亚
es.fmuser.org ->西班牙语
sw.fmuser.org ->斯瓦希里语
sv.fmuser.org ->瑞典语
th.fmuser.org - >泰国
tr.fmuser.org ->土耳其语
uk.fmuser.org ->乌克兰语
ur.fmuser.org ->乌尔都语
vi.fmuser.org - >越南
cy.fmuser.org ->威尔士语
yi.fmuser.org - >意第绪语
最近做了一个Android项目来使用编码和解码功能。 一般要求是:通过摄像机拍摄视频,然后提取帧,生成短视频和反向视频。 刚开始时,它直接使用H.264编码格式,而不使用MP4容器包装。 完成这些功能后,我觉得MP4格式与所有型号都更兼容,并减少了错误。 举一个明显的例子:当对Android进行硬编码时,通常会使用mediacodec和mediaextractor的组合。 但是,如果使用H.264裸视频文件,那么mediaextractor的setsource函数将报告异常。 在某些型号(例如魅族Note2,系统为5.1)上,它无法解析视频文件。
达到一般要求后,我们最初使用ffmpeg来制作视频编解码器,即所谓的软件编解码器。 由于处理速度慢以及需要在解码后快速显示,因此该方案无法达到我们想要的效果(ffmpeg视频解码并另存为JPEG示例: https://github.com/xiaoxiaoqingyi/ffmpeg-android-video-decoder )。但是它也具有一些优点,例如良好的兼容性和颜色转换。 毕竟,它不是硬件编解码器(您知道中国有很多型号)。 其次,ffmpeg可以输出指定的帧,而mediacodec无法输出指定的帧。 您需要向解码器输入几帧以解码一帧。 目前,我还没有找到上帝知道可以指导的输入框架和求解框架的方案。
在软件编解码器不合适的情况下,我们只能考虑使用硬件编解码器。 几天前,我参加了腾讯2017年现场直播开发者大会,了解到现在大多数实时直播都使用硬件进行编码和解码。 刚刚说过,某些型号不能使用mediaextractor解析H.264文件。 为了与大多数模型兼容,他们需要自己解析它们。 通过分析H.264文件的每个字节,他们可以区分每个帧的位置以及帧的类型。 为了达到这一要求,首先,如果使用照相机,则将从照相机获取的数据设置为nv21格式,但是有些人使用Camera2,并且该格式是图像。 无论是哪种格式,都需要将其转换为yuv420sp或yuv420p(注意:转码时,最好使用JNI,使用C / C ++转换格式,效率会高很多倍),这样可以使用mediacodec对其进行编码,然后保存H.264文件。 创建媒体编解码器实例时,除了设置必需的参数外,还应注意某些方面,例如选择哪种编码器。 通常,您将选择以下内容:
MediaCodec.createEncoderByType(“ video / avc”);
这似乎没有问题。 基本原理是获得最佳编码器,这是Android系统编码器注册表中的第一个编码器,通常是硬件解码(mediacodec也可以称为软件编解码器)。 实际上,以这种方式创建编码器不是很可靠。 尽管官方网站也建议这样做,但在许多家用android机型中,某些手机会出现问题,某些代码会显示蓝屏,而有些则会直接闪回。 有一个国外的例子,它大致意味着首先获得“视频/ AVC”类型的编码器,然后通过try catch一个接一个地测试。 如果没有问题,请选择此编码器。 源代码:mediacodec_ rtsp_ h264
另一个问题是,当设置了I帧间隔时,某些手机将无法工作。 设置如下:
mediaFormat.setInteger(MediaFormat.KEY_ I_ FRAME_ INTERVAL,间隔);
针对这种情况,我们需要使用另一种方式来设置I帧,这是强制性设置:
Bundle params = new Bundle();
params.putInt (MediaCodec.PARAMETER_KEY_REQUEST_SYNC_FRAME, 0);
mMediaCodec.setParameters(params);
在编码和解码中,当所有数据都输入到编解码器中时,请记住输入结束字符,然后编解码器将输出所有帧。
还有一个帧提取问题。 如果使用mediacodec提取帧,则会生成新的视频。 我可以从H.264文件中删除帧吗? 它不是这样工作的。 通常会有一个启动画面。 这需要将H.264文件重新输入到解码器,然后获取所需的帧,然后将其输入到新的编码器中以生成所需的H.264文件。 这里也存在格式问题。 从解码器解码的数据并不是可以由编码器直接编码的。 有些手机可以,有些甚至可以蓝屏,甚至可以闪回。 在这种情况下,我们需要统一解码器的格式。 如果您使用此表格获取:
mMediaCodec.getOutputBuffer()
那里有各种各样的格式,很难兼容。 Google推出了一种新格式:
mMediaCodec.getOutputImage(outIndex)
结果是一个图像对象,可以将其保存为JPEG图像或转换为nv21,就像上面的拍摄部分一样,转换为YUV422格式,然后输入到编码器。 因此,无论哪种型号都可以兼容(我尝试了10多家不同的手机制造商),尽管绕道而行。
|
输入电子邮件以获取惊喜
es.fmuser.org
it.fmuser.org
fr.fmuser.org
de.fmuser.org
af.fmuser.org ->荷兰语
sq.fmuser.org ->阿尔巴尼亚人
ar.fmuser.org ->阿拉伯语
hy.fmuser.org - >亚美尼亚
az.fmuser.org ->阿塞拜疆
eu.fmuser.org ->巴斯克
be.fmuser.org ->白俄罗斯语
bg.fmuser.org - >保加利亚
ca.fmuser.org ->加泰罗尼亚语
zh-CN.fmuser.org ->中文(简体)
zh-TW.fmuser.org - >中国(繁体)
hr.fmuser.org ->克罗地亚语
cs.fmuser.org ->捷克
da.fmuser.org ->丹麦语
nl.fmuser.org - >荷兰
et.fmuser.org ->爱沙尼亚语
tl.fmuser.org ->菲律宾
fi.fmuser.org ->芬兰语
fr.fmuser.org - >法国
gl.fmuser.org ->加利西亚语
ka.fmuser.org ->乔治亚
de.fmuser.org ->德语
el.fmuser.org - >希腊
ht.fmuser.org ->海地克里奥尔语
iw.fmuser.org ->希伯来语
hi.fmuser.org ->印地语
hu.fmuser.org - >匈牙利
is.fmuser.org ->冰岛语
id.fmuser.org ->印尼语
ga.fmuser.org ->爱尔兰
it.fmuser.org - >意大利
ja.fmuser.org ->日语
ko.fmuser.org ->韩文
lv.fmuser.org ->拉脱维亚
lt.fmuser.org - >立陶宛
mk.fmuser.org ->马其顿语
ms.fmuser.org ->马来语
mt.fmuser.org ->马耳他语
no.fmuser.org - >挪威
fa.fmuser.org ->波斯语
pl.fmuser.org ->波兰语
pt.fmuser.org ->葡萄牙语
ro.fmuser.org - >罗马尼亚
ru.fmuser.org ->俄语
sr.fmuser.org ->塞尔维亚语
sk.fmuser.org ->斯洛伐克
sl.fmuser.org - >斯洛文尼亚
es.fmuser.org ->西班牙语
sw.fmuser.org ->斯瓦希里语
sv.fmuser.org ->瑞典语
th.fmuser.org - >泰国
tr.fmuser.org ->土耳其语
uk.fmuser.org ->乌克兰语
ur.fmuser.org ->乌尔都语
vi.fmuser.org - >越南
cy.fmuser.org ->威尔士语
yi.fmuser.org - >意第绪语
FMUSER更轻松地传输视频和音频!
联系我们
分类目录
订阅电子邮件