前言:
大家好,今天继续分享音视频开源学习第二期,在前面的一期里面,我已经给大家演示了如何去跑起这个开源项目,包括源码下载;
音视频实战开源项目学习第一期!
今天继续来讲解这个开源项目。
不过在讲解这期内容之前,给大家分享这周和网友交流的一些音视频问题,也算是是一种经验积累和视野积累:
问题一:用vlc或者ffplay播放器拉流播放的时候,会出现一帧模糊(跟花屏有点不一样的显示):
问题二:解码花屏,问题出现在从摄像头rtsp拉流,然后给算法处理得到的frame,然后再次经过ffmpeg编码处理,再通过rtmp推流到流媒体服务上,然后拉流播放的时候,出现下面这种情况:
个人经验感想:
首先这个可以抓包分析是否掉帧了,如果出现掉帧肯定是会出现第一种现象或者可以通过ffplay播放的时候来查下看显示信息来查看;一般来说解码出现问题,详细来说有可能是编码端配置没有配置好,或者封装码流的时候,没封装好,比如到h264的pps或者sps信息找不到,那解码肯定不行的!这里我没说网络传输问题,这种情况也是有的!
我之前给大家分享跨距的问题,也就是你的分辨率没配置好,所谓没有配置好的意思是对于芯片内存访问像素点,不是按照他的内存对齐方式去访问,所以在播放的时候,会出现像很早之前的黑白电视那种画面一样!
当然向第二种那种实现,可能还要进行一个时间戳的转换!这个是技术点实现的细节问题!
当然大家在实际工作当中遇到这种解码的问题,看看还有哪些坑,欢迎来交流,一起进步!
ok下面开始分享本期内容:
一、rtsp_server的软件框架:
由于这个项目比较简单,但是其实也不简单,我一直在之前的文章或者直播里面给大家分享过,现在做rtsp这块的开发,在企业里面更多的是使用sdk提供的接口来开发,所以很多rtsp的实现小小细节你是不知道的,所以呢,这也是写这个系列开源项目的学习意义所在,当然后面会写更多的开源项目个人学习心得!
首先我们来看软件流程图,因为是第二期,我暂时没有把整个里面的流程划分出来,我想先一步步来,你可以跟着这个系列走,当然你学习的快,可以快我一步,哈哈哈哈!
核心的在RtspServer类里面的类方法实现,当然里面还有父类的一些继承,后面我画流程图全部捋清楚分享给大家:
这是整个入口,看起来是不是非常简单,核心的RtspServer类里面封装了什么,不过在讲解这些东西之前,我在这里给大家分享点小建议,前提是你必须对rtsp里面的client和server会话交互以及发送码流还有sdp的处理,得有一些了解才行,不必死记硬背,特别是协议头和协议体那块,倒是写代码得时候,直接找到对应得那部分看就行,关于这些基础知识你可以看我之前得直播讲解rtsp基础知识讲解或者呢您也可以看一些网上写的博客去学习,等你有了这些基础,你再来看我现在分享的这个开源项目,那么学习起来就非常轻松了。
现在我们来单独来看类里面的封装了些什么:
这些代码,我已经写了注解,大家看的时候应该能够明白!
嗯,这期内容,我也不写太多,一步步来,争取每个环节,我们都弄的清清楚楚,明明白白!
这里给大家提示一下,如果对c++不熟悉的朋友,可以查找刚才代码中出现的容器:list、map!
最后:
这期的内容,我就简单分享到这里了,大家可以先按照我上面的思路,去把整个过程去梳理一下,比如说client和server之间要做什么东西,你可以把这块看成一个实际开发过程中的一个小需求去对待,相信对你绝对有提高!
好了,如果对这个系列感兴趣的朋友,可以加我微信交流学习,如果喜欢音视频推流开发实战项目的朋友,可以购买我的课程来学习,早学早掌握,工作也会更的心应手!课程内容我就不再展示了,如果用心,确实想学习的话,可以私聊我: