blueberryCoder / LiveStream

一个实现直播的解决方案,视频采用H264编码、音频采用ACC编码、传输采用Rtmp协议
http://blog.csdn.net/a992036795/article/details/64460049
365 stars 109 forks source link

适配高通COLOR_FormatYUV420SemiPlanar,NV21转NV12后,画面黑白,有绿影 #30

Open kimi2009 opened 1 year ago

kimi2009 commented 1 year ago

转完后,会出现偏色的绿影,卡在这半个月了,该怎么转啊,我看只有i420的适配,该怎么修改啊,希望大神给指点一下

blueberryCoder commented 1 year ago

我目前还没时间处理这个。我编码器需要的数据格式目前写的是 COLOR_FormatYUV420Planar。你可以改改编码器的输入格式试试,或者将原数据用libyuv转成COLOR_FormatYUV420Planar试试,工程里集成了libyuv。

blueberryCoder commented 1 year ago

https://github.com/blueberryCoder/LiveStream/blob/master/AndroidPublisher/rtmplive/src/main/java/com/blueberry/media/codec/video/VideoEncoder.java#L60

kimi2009 commented 1 year ago

在高通的设备上,编码器格式好像只能是COLOR_FormatYUV420SemiPlanar,数据转换用的NV21转NV12,结果是图像的灰白图没问题,但背景阴影有色偏。一帧图像分成了四宫格,一个对角的两格是彩色,一个 对角的两格是黑白,感觉是UV没有转对,实在是调不出来。

kimi2009 commented 1 year ago

方便的话,我发个图给您看看,能加下您微信吗?

blueberryCoder commented 1 year ago

你为什么需要将NV21转为NV12呢?不转会有问题吗?

blueberryCoder commented 1 year ago

https://www.fullstackaction.com/pages/8102b2/#%E4%B8%80%E3%80%81%E5%BD%95%E5%83%8F%E5%8F%98%E8%89%B2

看起来COLOR_FormatYUV420SemiPlanar,再不同的机型上适配会有些困难。之后可以试试MediaCodec Surface模式编码。

kimi2009 commented 1 year ago

试了很多种转换,感觉问题就在UV照应的不对呈现出来的灰白或者绿斑现象,感觉就是一个小问题,但尝试了很多方法无法纠正,很希望跟您沟通一下,如果方便的话,您加我微信: Ferrari_Racing