# 基于IPv4的流媒体广播系统Plus
Streaming media broadcasting system based on IPv4. It is written in C language and uses advanced unix programming technology.
## 项目简介
**基于IPv4的流媒体广播系统Plus**,在原版的基础上进行升级和bug修复等。采用C语言编写,使用高级Unix环境编程技术。基于**客户端/服务器模型(C/S)**开发,运行于**Linux**平台。服务端可以运行在个人PC或小型服务器上,客户端可以运行在个人PC或者ARM便携设备。服务端作为**守护进程**运行在后台,启动后会读取本地的媒体库信息,生成所有的**节目描述信息**,并采用**UDP组播**的形式发送给所有加入该组播组的设备,同时读取本地媒体库中的歌曲二进制内容,形成**相应频道包**,向局域网内每个设备发送MP3格式的流媒体音乐。服务器端采用**动态线程池**技术处理节目描述信息发送以及频道内容发送的并发任务,流媒体发送时的流量控制采用**令牌桶**流控技术;客户端采用**多进程**,父进程负责从网络接收频道信息和歌曲内容的数据,通过**进程间通信**技术(例如:管道)发送给子进程,子进程使用解码器(mpg123)对收到的流媒体音乐进行解码并使用扬声器播放。采用系统日志记录运行时产生的log信息。
## 需求分析
- 客户端分为数据接收和数据解码两个较为独立的功能,采用多进程方式实现,进程间通信采用匿名管道实现。
- 广播系统,服务端与客户端采用面向无连接的UDP协议,最实用的实现方式是使用UDP组播技术,相比广播更加节省局域网资源。
- 由于服务端需要多个任务并发执行,首先想到多线程处理,考虑后期功能升级,决定采用动态线程池,由线程池来管理各线程的申请和资源释放。
- UDP是面向无连接的协议,也没有流量控制。为了让客户端能正常收到所有的歌曲内容,不严重丢帧,需要手动实现流控算法,这里采用令牌桶流控。
- 客户端需要知道广播都有什么节目和内容,因此服务端需要一个不停发送节目单信息的频道。
- 服务端需要同时广播n个频道的内容,因此需要实现多线程并发。
- 以守护进程模式运行时需要使用系统日志,方便查看崩溃记录和DEGUB信息。
## 系统框架
![Image1](https://github.com/litbubo/Streaming_media_broadcasting_system_based_on_IPv4/blob/main/.mdimage/Image1.png)
服务端框架
------
![Image2](https://github.com/litbubo/Streaming_media_broadcasting_system_based_on_IPv4/blob/main/.mdimage/Image2.jpg)
客户端框架
## 目录结构
```
Streaming_media_broadcasting_system_based_on_IPv4/
├── client
│ ├── client.c
│ ├── client.h
│ ├── Makefile
│ └── start.sh
├── include
│ └── protocol.h
├── medialib
│ ├── ch1
│ │ ├── desc.txt
│ │ ├── 世界这么大还是遇见你.mp3
│ │ └── 起风了.mp3
│ ├── ch2
│ │ ├── desc.txt
│ │ ├── 带你去旅行.mp3
│ │ └── 再见只是陌生人.mp3
│ ├── ch3
│ │ ├── desc.txt
│ │ ├── Summertime Sadness.mp3
│ │ └── 学猫叫.mp3
│ └── ch4
├── server
│ ├── channel.c
│ ├── channel.h
│ ├── list.c
│ ├── list.h
│ ├── Makefile
│ ├── medialib.c
│ ├── medialib.h
│ ├── server.c
│ ├── server_conf.h
│ ├── threadpool.c
│ ├── threadpool.h
│ ├── tokenbucket.c
│ └── tokenbucket.h
├── README.md
├── LICENSE
└── Streaming_media_broadcasting_system_based_on_IPv4.code-workspace
```
说明:client文件夹为客户端代码,server文件夹为服务端代码。include存放服务端客户端数据传输格式的协定头文件。medialib为本地媒体库格式样例。
## 测试环境
- Ubuntu 20.04 LTS x86_64
- 正点原子i.MX6ULL Linux阿尔法开发板
- gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.1)
- gcc version 4.9.4 (Linaro GCC 4.9-2017.01) (交叉编译器)
- Thread model: posix
## 部署
```shell
$ git clone https://github.com/litbubo/Streaming_media_broadcasting_system_based_on_IPv4.git #Github # https://jihulab.com/litbubo/Streaming_media_broadcasting_system_based_on_IPv4.git jihulab
$ cd Streaming_media_broadcasting_system_based_on_IPv4/
$ sudo cp -r ./medialib/ /var/
$ cd server/
$ make
$ ./server -R 0 # 守护进程运行
$ cd ../client/
$ make
$ ./start.sh # 启动客户端,为防止丢帧,首次启动务必使用此脚本
```
## 运行效果
![Image3](https://github.com/litbubo/Streaming_media_broadcasting_system_based_on_IPv4/blob/main/.mdimage/Image3.png)
## 技术栈
> 高级Unix环境编程
- 文件IO
- 进程
- 进程间通信
- 守护进程
- 信号
- 线程
- 网络编程(socket)
- UDP
## 后期改进
- 采用Qt框架实现带GUI的客户端,可在UI中显示歌曲信息和进度条等。
- 服务端采用动态媒体库,随着媒体库的增加和减少,服务端无需重启即可增加或减少频道的数目,同时更新后的发送节目单信息。
## 其他
配套课程:[史上最强最细腻的linux嵌入式C语言学习教程【李慧芹老师】](https://www.bilibili.com/video/BV18p4y167Md)
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
毕设&课设&项目&实训-基于IPv4的流媒体广播系统Plus,在原版的基础上进行升级和bug修复等。采用C语言编写,使用高级Unix编程技术. 【项目资源】: 包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。 包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】: 所有源码都经过严格测试,可以直接运行。 功能在确认正常工作后才上传。 【适用人群】: 适用于希望学习不同技术领域的小白或进阶学习者。 可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】: 项目具有较高的学习借鉴价值,也可直接拿来修改复刻。 对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】: 有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 鼓励下载和使用,并欢迎大家互相学习,共同进步。
资源推荐
资源详情
资源评论
收起资源包目录
基于IPv4的流媒体广播系统Plus,在原版的基础上进行升级和bug修复等。采用C语言编写,使用高级Unix编程技术.zip (35个子文件)
资料总结
medialib
ch1
世界这么大还是遇见你.mp3 3.67MB
desc.txt 50B
起风了.mp3 4.97MB
ch4
test 4B
ch2
带你去旅行.mp3 3.45MB
desc.txt 51B
再见只是陌生人.mp3 3.84MB
ch3
Summertime Sadness.mp3 4.05MB
desc.txt 39B
学猫叫.mp3 3.19MB
include
protocol.h 2KB
.vscode
c_cpp_properties.json 375B
LICENSE 34KB
client
Makefile 143B
client.c 8KB
start.sh 201B
client.h 303B
.mdimage
Image2.jpg 25KB
Image3.png 1.16MB
Image1.png 55KB
Streaming_media_broadcasting_system_based_on_IPv4.code-workspace 581B
server
list.h 161B
channel.c 2KB
Makefile 290B
channel.h 166B
server.c 7KB
threadpool.h 923B
medialib.h 738B
threadpool.c 15KB
server_conf.h 871B
tokenbucket.h 811B
tokenbucket.c 7KB
medialib.c 8KB
list.c 3KB
README.md 5KB
共 35 条
- 1
资源评论
妄北y
- 粉丝: 2w+
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于Spring Boot + Vue 3.2 + Vite 4.3开发的前后端分离博客项目源代码.zip
- Go语言基础知识到高级应用全面解析
- 毕业设计前后端分离博客项目源代码.zip
- E008 库洛米(3页).zip
- 前端拿到的列表数据里id都一样的处理办法.txt
- 批量导出多项目核心目录工具
- 课程设计前后端分离博客项目源代码.zip
- C#语言教程:面向对象与高级编程技术全面指南
- PHP语言详细教程:从基础到实战
- 电影管理系统,数据库系统概论大作业
- Web开发中JavaScript编程语言的全面解析
- ajax发请求示例.txt
- 企业数据管理系统项目源代码.zip
- 计算机技术-JAVA语言介绍-基本语法(上)
- 基于西门子 PLC 的晶圆研磨机自动控制系统设计与实现-论文
- 家庭理财系统源代码+答辩PPT+论文.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功