近期在公司项目中用到了ffmpeg这个开源的视频播放库,在使用过程中出现了以下的几个问题:
在出现以下几个问题之前,应该首先了解以下几点基础知识:
1.对于rtmp流的介绍:rtmp流在播放的时候会经过以下几个步骤:
1)三次握手协议
2)建立网络连接:在建立网络连接的过程中会和服务器端进行网络流的并且需要把窗口大小,带宽等其他问题;
3)建立视频流:
4)开始播放
2.对于流的解析播放的过程:
1)首先进行解协议:解协议的目的是,rtmp流会封装其他的一些的比如播放器端和服务器端商定好的一些限制之类的东西,根据rtmp协议将接收回来的视频流解析成标准的rtmp格式
2)解封装:将第一步中得到的rtmp格式的流解封装,拆包成为音频和视频
3)解码:将音频和视频都做对应的解码操作,并打开音视频同步
4)播放:将解码之后的结果最终转化成为图片,并且展示出来
以上有问题后面再修改
问题一:在视频刚开始的播放过程中会出现打开视频流之后一直不能获取到rtmp流的存在(大概需要等3-5秒),对于这个问题,经过最终查询,发现问题出现在解封装这一步,在这一步中,首先需要avformate_stream_open,之后执行avformate_stream_read,在执行这步的时候需要大量的时间,这个主要原因是,这个解封装的上下文,在这块有两个参数的限制。第一个:probisize:这个参数用于表示读取的视频流的缓冲大小,默认值是:5000000,第二个参数是max_analynize_time,默认值是8秒,这两个参数无论哪一个参数满足条件了都表示已经读取结束,故,需要重新设置这两个参数;