多播简介
- 单播地址标识单个IP接口,广播地址标识某个子网的所有IP接口,多播地址标识一组IP接口
- 单播和广播是两个极端,多播则在这两者之间折衷
- 多播数据报只由加入多播组的应用的主机的接口接收
- IPV4的D类地址是IPV4的多播地址,范围是(224.0.0.0-239.255.255.255)
如何实现多播
- 服务端:多播服务端并不需要什么特殊的操作,只需要创建udp套接字,然后向多播地址指定端口发送数据就行
- 客户端:多播客户端需要做的工作是,创建udp套接字,绑定多播端口,加入多播组
多播的sdp描述文件
a=type:broadcast a=rtcp-unicast: reflection m=video 5678 RTP/AVP 96 c=IN IP4 239.255.255.11/255 a=rtpmap:96 H264/90000 a=framerate:25
- 这是一个多播H.264的sdp文件(详情看:"1.RTSP协议介绍.md")
- 端口号:5678,多播IP:239.255.255.11
代码实现
源码
- "test/005/test_rtp.c"
- "test/005/test_rtp.h"
- "test/005/test_rtp_h264.c.h"
额外所需文件
- multicast.sdp
- test.h264(使用"test/002/"下的即可)
测试
- 编译:gcc test_rtp.c test_rtp_h264.c
- 运行:./a.out test.h264
- 在对多个命令行窗口下使用命令"vlc multicast.sdp"
源码讲解
// rtpSendH264Frame(rtpServerSockfd, CLIENT_IP, CLIENT_PORT, rtpPacket, frame + offset, naluLen);
rtpSendH264Frame(rtpServerSockfd,MULTICAST_IP,MULTICAST_PORT,rtpPacket,frame+offset,naluLen);
- 源码说明:服务端代码实现非常简单,只需要修改“4.将H264码流打包成RTP包.md”对应的"test/002/"代码中的目的IP和目的端口改为目的多播IP和目的多播端口就可以了