任务要求:
输入:对接OBS推流
输出:能够在手机端浏览器观看OBS推流的视频/音频
源码:
gitee:https://gitee.com/walty/WQ_RTMP
由于个人在C、C++方面能力有限,所以用Java写的项目,很多地方不成熟,还望包含。
知识补充:
1、HLS协议
HLS协议在Android端浏览(chrome)器与IOS端浏览器(safari)支持很好,只需要单纯的HTML的<video src="xxxx.m3u8"> 即可直接对接到该协议。
HLS协议主要分为两类文件,
1)一类为视频文件(.ts)文件,该文件主要保存了视频与音频,ts文件有多个,每个ts文件保存极短的视频。
2)第二类为 清单文件(.m3u8),该文件内保存有视频文件的清单,m3u8文件只有一个,主要功能是指明当前视频是那个ts文件,下一个视频是哪个ts文件。
2、RTMP协议
RTMP协议是OBS软件推送数据(音频数据、视频数据、控制数据等)协议。
RTMP协议还包含有以下协议,用于压缩数据。
1)AMF0协议
amf0协议主要用于压缩控制数据,如:开始推流、停止推流、视频音频规格等等。[注]当前较为流行的是amf3协议,由于我做是去年做的、且RTMP协议也属于较老的协议,所以可能目前还没跟上时代的潮流。
2)FLV协议
flv协议主要用于压缩视频音频数据。
3)H264、AAC
H264为视频格式,AAC为音频格式。虽然有MP4、wav等格式,但是在直播技术中较为主流的还是h264、aac。[注]最近已经有推出h265协议,压缩能力更强。
3、FFmpeg
如果你是工作需要,建议使用FFmpeg代码主要思想
总:RTMP协议解析OBS推流的数据-->>提取、保存H264/AAC数据-->>构建TS文件和更新m3u8文件-->>HTML端通过Video标签访问m3u8清单文件,实现直播效果。