AI编程哪天真能分析解决问题才是生产力,不然还是渣渣……
记最近一次分析视频清晰度的问题,想使用FFMPEG最新的8.0版本中带的WHIP来试下“0延时”的推流,测试了RTMP和RTP_MPEGTS都是正常的了,但到了WHIP下面还是各种写包失败(虽然它的底层还是调用的SRTP来发送的),暂时还没空继续研究它的代码,就被Android手机上的清晰度问题缠住了。
现象就是,刚开始推流时,按给mediacodec设置的CBR和2M码流在推,可不到1,2秒,画面突然降到只有50KB(大概只有400kbit)了,画面就充满了马赛克。
把问题推给AI,AI的回答从教你如何使用FFMPEG命令行,一直讲到了大量代码给你演示怎么推流,最后都讲到了安卓硬件厂家的隐藏代码,说会因为cpu负载或发热等问题限制码流,并随手扔给你一些隐藏代码:
例如:
1 | vendor.sec-enc-slice-num=8 |
等等,并一本正经地给你解释,FFMPEG没有提供接口让你设置这些厂家私有、隐藏的参数,你需要不使用FFMPEG而是直接使用Mediacodec,或者修改FFMPEG的mediacodecenc.c中的参数设置,把这些参数加进去。
……
诸如此般,花了好几天时间反复编译FFMPEG,感觉被AI戏弄了。
最后实在没办法了,用x264软编吧,画面出来的时候真的感觉世界都变清晰了,但x264却会在编码过程中,弹出WARNING消息,经过查询,它是认为送给它的待编码Frame没有正确的PTS值。
这个值的设定,各种代码演示里都没提,并且Mediacodec也没任何不满,但当把这个值设置上时,世界突然为之变色,它居然好了,变清晰了。
代码就是:
1 | ret = avcodec_send_frame(acctx, aFrame); |
让送给编码器的frame的pts递增,真特么的,MediaCodec果然是Android世界第一草台班子API集合……