项目简介
我们通过UDP来进行流媒体的传输,主要实现音乐的发送,通过UDP来进行组播,可以对应多个客户端,客户端方面,采用mpg123来进行音月资源的解析。
原理图
服务端采用多线程来实现节目单和节目资源的发送,客户端采用多进程,父进程接收资源,和显示节目单,在选择节目后,将资源发送给子进程,子进程来实现资源的解析。
在server端主要需要解析文件资源模块,节目单发送线程,节目资源发送线程和流量控制模块来控制资源发送的速率,接下来我将分模块讲解一下它的实现。
头文件的定义
先看一下代码吧
#ifndef _PROTO_H_
#define _PROTO_H_
#include <stdint.h>
#define DEFAULT_MGPPOUP "239.0.0.2" //广播地址
#define DEFAULT_RCVPORT "9000" //端口
#define CHNNUM 100 //节目最大数
#define LISTCHNID 0 //节目单的id
#define MINCHNID 1 //最小节目号
#define MAXCHNID (MINCHNID+CHNNUM-1) //最大节目号
#define MSG_CHANNEL_MAX (65536-20-8) //资源最大发送量
#define MAX_DATA (MSG_CHANNEL_MAX-sizeof(uint8_t))
#define MSG_LIST_MAX (65536-20-8)
#define MAX_ENTRY (MSG_LIST_MAX-sizeof(uint8_t))
struct msg_channel_st //频道信息
{
uint8_t chnid; //节目id
uint8_t data[1]; //传输的数据
}__attribute__((packed)); //不需要对齐
struct msg_listentry_st //节目单信息
{
uint8_t chnid