美文网首页Android开发
Android:魅族手机推流只有声音,没有图像的问题……

Android:魅族手机推流只有声音,没有图像的问题……

作者: 借汝之名冠之吾姓 | 来源:发表于2018-05-09 15:38 被阅读33次

    我是用MediaCodec进行H264的硬编码,PS标准封装流:

    Android多媒体--MediaCodec 中文API文档

    原因:

           视频流编码时,魅族手机无法断点到I帧的标识,因此没有封装I帧,因此P帧也无法封装(我的代码流程逻辑是这样),因此整个推的流中就没有视频流,因此只有声音,没有图像.

    找到原因就好办了,解决方法:

           我们是在对待编码数据进行while循环中,通过bufferInfo.flags来判断编码后的当前数据是否是关键帧数据(就是I帧数据),从而决定是否进行I帧封装,如下图:

           在安卓原生的MediaCodec中,关键帧的标识如图:

           也就是说,当bufferInfo.flags=1时,认为该条数据是已编码过后的I帧.然后进入该判断,并进行I帧的PS封装.

           在我使用魅族手机debug断点时,发现他首个关键帧标识值bufferInfo.flags=9.

           因此我们以if (bufferInfo.flags == BUFFER_FLAG_SYNC_FRAME) {……}判断是永远进不去的,所以不会封装I帧,随之就没有P帧,因此整个视频流PS封装失败,推的流中便没有视频流.

           因此,我修改了if判断,如下:

           并将项目跑起来,推流,再拉流播放,图像出来啦,完美此问题解决!

           提醒:我不确定所有魅族手机的关键帧标识值都 =9,这个得自己去debug断点.

           疑问:其他手机的关键帧标识值都是按照安卓原生的规则定义为2,我不知道是魅族手机自己封装的=9,还是说魅族手机摄像头的硬件中封装=9.希望有知道的大佬能留言告诉在下,感激不尽.

    相关文章

      网友评论

        本文标题:Android:魅族手机推流只有声音,没有图像的问题……

        本文链接:https://www.haomeiwen.com/subject/kkynrftx.html