目前开源项目或市面上的直播APP开发方式都是使用ffmpeg来实现视频推流。
数据流
这里所说的直播,就是将你的客户端产生的视频数据,实时发送到服务器上,服务器上的数据再实时发送到播放客户端上。
以视频数据为例:
获取camera画面→首先是摄像头拍摄得到的原始画面数据,原始画面数据格式没有特殊要求→利用camera获取的画面
Camera会把获得的画面保存为opengl的一个纹理,我们使用这个纹理就能使用camera画面。
绘制画面
在获得画面后,我们要把这个画面的纹理画到mediacodec上,由它提供surface供我们把纹理画到上面。
H.264数据
画面画上去后,mediacodec会帮我们把原始画面数据,压缩成相应的视频数据,目前常用的压缩是H.264格式。所谓的H.264数据,其实是一堆byte数组。
RTMP
开源项目,可以将视频数据封成RTMP包,发送到服务器上。
总结
数据流完整的流畅:Camera→SurfaceTexture→Surface→MediaCodec→encodedate→RTMPMuxer→Server
音频数据
对比视频里数据简单一些,从AudioRecord里获取原始音视频数据,编码成AAC数据,然后给RTMPMuxer,封装成RTMP包,发到服务器麦克风MIC→AudioRecord→voice data→MediaCodec→encode data→RTMPMuxer→Server
视频RTMP包和音频RTMP包之间是按照时间排序排列的,MediaCoodec返回编码数据时,会返回编码数据的时间戳。但注意编码成RTMP包时,取得的是相对时间戳,也就是说取到时间戳时,需要计算与上一个包的时间戳差值,记录到RTMP包里。
直播APP开发完成后测试服务器,需要测试的朋友请自行搭建RTMP服务器,如有开发团队开发可不必自己动手。运用搭建的服务器,用Module是nginx-rtmp-module。搭建服务器不需要写代码,根据教程进行命令编写即可。
---来自腾讯云社区的---直播系统开发直播软件开发
微信扫一扫打赏
支付宝扫一扫打赏