推流项目AWLive番外篇(bug修复)

前段时间在github偶然看到了一个推流的的工程,出于兴趣拜读了一下源码;
其中也发现了一些问题; 不知道作者是出于什么样的目的没有修复这些问题,在这里我罗列了一下并修复相关问题 ;

修复后的仓库地址

https://github.com/hunter858/PushStreamSDK

视频问题:

1.视频在AWAVCaptureTypeSystem + 软编码模式下, 视频条状马赛克
2.视频在AWAVCaptureTypeSystem + 硬编码模式下,画面底部出现绿边
3.视频在AWAVCaptureTypeGPUImage + 软编码模式下,画面卡住不动
4.视频在AWAVCaptureTypeGPUImage + 硬编码模式下,画面条状马赛克

音频问题:

  1. 音频在AWAudioEncoderTypeHWAACLC模式下,声音不连续
  2. 音频在AWAudioEncoderTypeSWFAAC模式下,声音有杂言和颤音

问题1:视频在AWAVCaptureTypeSystem + 软编码 模式下,视频条状马赛克

bug1修复前后对比

问题原因:
出现该问题的原因是,项目中采集到的视频帧率为720x1280
但是在送入软编码器的实际数据是 768x1280768Y分量 BytesPerRow的长度;

问题2: 视频在AWAVCaptureTypeSystem +硬编码 模式下,画面底部出现绿边

bug2修复前后对比

问题原因:
出现该问题的原因是,pixeBufferNSData 然后NSData再转回YUV类型的pixeBuffer的过程中,Y分量的数据拷贝的实际长度是768,代码逻辑中配置的为videoConfig的宽度720导致的;

问题3: 视频在AWAVCaptureTypeGPUImage + 软编码模式下,画面卡住不动

问题原因:
原有代码在AudioToolBox音频编码的过程中,创建的aw_flv_audio_tag对象实际不包含音频数据,所以导致推的视频流实际没有音频流,从而导致画面卡住,修复该编码逻辑或渠道正确的PCM数据即可;

image.png

问题4: 视频在AWAVCaptureTypeGPUImage + 硬编码模式下,画面花屏

bug4修复前后对比

问题原因:
问题的原因是在使用 GPUImage框架,获取的到的ARGB数据在转YUV数据的过程中 数据拷贝有问题 ,且libYUV框架的使用ARGBToNV12() 参数设置也有问题,和上面的问题属于同一类型的bugy_stride不是正确的值导致的,修复该问题即可正常显示 美颜后视频帧

问题5: 音频在AWAudioEncoderTypeHWAACLC 模式下,声音不连续

问题原因:
在送入编码器的PCM数据未控制在 1024的样点的整数倍;应该在转码输入之前开辟一个PCMbuffer缓冲区,将传入数据控制在1024个样点即可解决问题

问题6: 音频在 AWAudioEncoderTypeSWFAAC 模式下,颤音

该问题还在修复中....
该问题还在修复中....
该问题还在修复中....

其它关于项目的一些关键技术讲解可以看原作者的文章,这里不赘述了

  • 1小时学会:最简单的iOS直播推流(一)项目介绍
  • 1小时学会:最简单的iOS直播推流(二)代码架构概述
  • 1小时学会:最简单的iOS直播推流(三)使用系统接口捕获音视频
  • 1小时学会:最简单的iOS直播推流(四)如何使用GPUImage,如何美颜
  • 1小时学会:最简单的iOS直播推流(五)yuv、pcm数据的介绍和获取
  • 1小时学会:最简单的iOS直播推流(六)h264、aac、flv介绍
  • 1小时学会:最简单的iOS直播推流(七)h264/aac 硬编码
  • 1小时学会:最简单的iOS直播推流(八)h264/aac 软编码* 1小时学会:最简单的iOS直播推流(九)flv 编码与音视频时间戳同步
  • 1小时学会:最简单的iOS直播推流(十)librtmp使用介绍
  • 1小时学会:最简单的iOS直播推流(十一)sps&pps和AudioSpecificConfig介绍(完结)

你可能感兴趣的:(推流项目AWLive番外篇(bug修复))