cherishloveyou / PushStreamSDK

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

PushStreamSDK

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

关键字: AudioToolBox、VideoToolBox、FAAC、libX264、libRTMP、AVFoundation

修复后的仓库地址

https://github.com/hunter858/PushStreamSDK

视频问题:

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

音频问题:

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

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

bug1修复前后对比

问题原因: 出现该问题的原因是,项目中采集到的视频帧率为720x1280; 但是在送入软编码器的实际数据是 768x1280768 Y分量 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 模式下,颤音

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

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

About

License:Apache License 2.0


Languages

Language:Objective-C 77.4%Language:C 12.2%Language:C++ 10.4%