| AI + 安防 | 1,比如政府,学校,工厂,商场等大量安装摄像头的地方,需要用到支持国标的流媒体服务 2,比如公安厅,要实时查看某城市某个辖区某一道路的监控,需要用到支持级联的国标流媒体服务 3,比如有些家用摄像头支持远程监控,并能够实时上传报警视频,以及远程语音对讲,需要用到协议类型更多的流媒体服务 4,比如空中型,家务型,搜救型,玩具型等机器人,自动驾驶,智慧医疗等等,都需要使用到流媒体服务 5,比如运行在解码器上能够实时显示多路监控的客户端播放器 6,比如运行在PC上能够实现显示指定路数监控的客户端播放器 7,比如很多摄像头内置的信令交互和推流组件 | 1,如果只实现流媒体服务或者国标信令服务,且运行在x86机器,可以使用go或者c/c++。 2,如果只实现国标信令服务,且运行在x86机器,可以用c/c++,go, java。 3,如果运行在arm或一些嵌入式设备,只建议使用c/c++。+ 4,如果是客户端播放器,或者摄像头的推流组件,也只建议使用c/c++。 | 1,主要用到的网络协议:gb28181, sip,rtsp, rtp, rtcp 2,部分功能需要用到的网络协议:rtmp, http-flv, hls | 一,掌握一门适合音视频开发的编程语言: go虽然可以做流媒体服务,但考虑到一些部署平台和编解码等不太合适的点,如果入行音视频开发,还是推荐c/c++ 二,网络编程基础: 掌握socket的IO非阻塞式多路复用编程,掌握常用的socket通信模型select和epoll。掌握tcp/udp传输层协议。 三,音频基础知识: 采样率,声道,音频帧,pcm,音频编码格式:aac, g711, opus, mp3等。音频的封装格式:mp3, wav, wma,midi, aac, cda, mov等。 四,视频基础知识: 了解像素,图片,图片格式,rgb, yuv,视频编码格式:h264,h265等,视频封装格式:mp4, mov, 3gp,mkv, avi, flv, ps,ts等。 | 一,首先可以学一学ffmpeg命令行相关的知识,这样有利于从表面上了解一些音视频相关的的技术点。 二,其次复习一下网络编程的基础知识,至少要能基于socket写一个最简单的 TcpServer和TcpClient。并能够发送和接收字节流数据。 三,无论是选择上述三个音视频开发方向的任意一个,都需要从基础原理开始学习,推荐从RTSP协议开始流媒体开发的学习,因为RTSP协议是所有流媒体协议中最具有代表性的。而且在学习RTSP的过程中,也可以再一步一步的补充音频和视频的基础知识。 四,RTSP协议学完后,再学习一个基于socket多路复用技术,开发一个RTSP流媒体服务器的相关案例。这个时候基本上完全就搞懂了流媒体服务器是怎么一回事,之后无论是学习A安防方向,还是直播方向,都会比较容易选择且目标清晰了。 |
| 直播、点播 | 1,比如bilibili的直播的流媒体服务器 2,比如bilibili的视频点播的流媒体服务器 3,比如bilibili的网页版客户端,移动版客户端,桌面版客户端 | 1,直播或点播的流媒体服务都可以采用go或c/c++开发,但涉及到编解码还是需要使用c/c++,另外比较有名气的开源直播流媒体服务,基本上都是c/c++开发,比如nginx, srs, zlmediakit。 2,如果是客户端播放器,网页版通常都有开源库可用。主要是移动版和桌面版通常都需要流媒体开发 | 1,主要用到:rtmp, http-flv, hls, cdn 2,部分功能需要用到:WebRTC (直播时的主播进行直播连麦等) | | |
| WebRTC | 1,视频会议:常见的腾讯会议,钉钉会议等 2,云游戏:用手机或低性能电脑远程连接一个高性能电脑,打游戏那种技术 3,远程控制:比如向日葵远程软件, TeamViewer等 | 当前WebRTC的开源项目比较多,主要集中在go和c/c++两种语言。但如果想要能够深入学习WebRTC,还是建议学习c/c++相关的 | 1,信令服务器 2, NAT网络地址转换协议 3, STUN/TURN中继服务器 4, P2P通信 | |