编程小白练手的流媒体项目

1、引子

大家好,我是老吴。

今天分享一个入门级开源项目:
https://github.com/litbubo/Streaming_media_broadcasting_system_based_on_IPv4

一个基于 Linux C 实现的小型音频广播软件,包括客户端和服务端 2 个程序。

服务端会广播频道列表,客户端收到频道列表后,选择一个自己想听的频道,然后将收到的音频数据播放出来。

能收获什么?

1、练习 UDP 网络通讯

2、练习进程通信

3、练习 Posix 多线程编程

4、练习编写守护进程

5、了解流媒体开发

源码 2000 行左右,可以说是最最最简单的流媒体示例程序了。

但是干货巨多,涉及网络通讯、进程通信、多线程、文件读写、守护进程、线程池、流量控制等知识点,很适合编程初学者用来练手。


下面,简单介绍一下流媒体。

流媒体是一种以流的形式在网络上进行数字媒体(音频、视频)传输的技术。

它将频、音视频之类的连续媒体经压缩编码、数据打包后按照一定的时间间隔要求连续地发送给接收方,接收方在后续数据不断到达的同时对接收到的数据进行重组、解码和播放。

如果你对流媒体感兴趣的话,可以看一下 Live555,一个更流行且更专业的流媒体库。

它支持了各种标准流媒体传输协议,如 RTP/RTCP、RTSP、SIP,实现了对多种音视频编码格式的音视频数据的流化、接收和处理等支持。播放 VLC 和 MPlayer 都是基于它来实现流媒体播放的功能,并且非常适合嵌入式领域。

2、用法

编译运行:

$ cd server
$ make
$ ./server

服务端启动后,会持续发送频道清单和所有频道的音频数据:

图片

$ cd client
$ make
$ ./client

客户端启动后,会先收到频道清单,输入频道号后,就能听到音乐了:

图片

3、实现

服务端核心逻辑:

1、初始化组播 socket

2、从媒体库中获取频道资源,媒体库是以文件目录的形式存在:

图片

一个目录对应一个频道,每个目录下有一 desc.txt 文件,用于描述音频资源,该目录下的所有 mp3 文件都会被检索出来。

结构体 channel_context_t 用于描述频道:

图片

3、循环广播频道清单

广播频道清单是一个反复循环的过程,这是一个线程池里的一个任务。

当客户端加入到组后,先会读取频道清单,获取到频道清单后,询问用户要收听哪个频道的音频,然后才会开始接收音频数据。

结构体 msg_list_t 用于描述频道清单包:

图片

4、遍历所有频道,每一个频道都有一个线程任务持续的传输音频数据。

具体地,就是逐块地读取资源库频道目录下的音频文件,然后 sento() 给客户端。

结构体 msg_channel_t 用于描述频道数据包:

图片


服务端的功能模块框图:

图片


客户端核心逻辑:

1、加入多播组;

2、获取频道清单;

3、询问用户想听到频道;

4、获取指定音频的音频数据,并通过管道发送给子进程 mpg123,由 mpg123 将音频播放出来。

图片

到此,Streaming_media_broadcasting_system_based_on_IPv4 的内部实现核心部分就分析完毕了。

4、总结

Streaming_media_broadcasting_system_based_on_IPv4 是一个基于 Linux C 实现的小型音频广播软件。

源码 2000 行左右,干货巨多,涉及网络通讯、进程通信、多线程、文件读写、守护进程、线程池、流量控制等知识点,是一个很适合编程初学者用来练手的流媒体开源项目。

不过,这个项目还有许多可以完善的地方,例如处理掉线的情况。

原创文章,作者:guozi,如若转载,请注明出处:https://www.sudun.com/ask/79655.html

(0)
guozi's avatarguozi
上一篇 2024年5月30日 下午7:14
下一篇 2024年5月30日 下午7:15

相关推荐

  • 如何利用asp美国空间租用搭建网站?

    想要拥有一个高质量的网站,除了精美的设计和丰富的内容,选择一个优质的空间也是至关重要的。而在众多的空间提供商中,ASP美国空间无疑是备受推崇的一种选择。那么,什么是ASP美国空间?…

    行业资讯 2024年3月22日
    0
  • 360搜索引擎怎么样

    360搜索引擎,是如今备受关注的搜索引擎之一。作为一个搜索引擎,它究竟有什么样的特点和优势呢?它又是如何发展起来的?用户对它又有着怎样的评价?接下来,让我们一起来探究一下吧! 什么…

    行业资讯 2024年3月20日
    0
  • 反向域名侵夺,反向代理https

    (3) 重启Varnish服务使设置生效。 (4)通过访问Varnish服务器的IP地址或域名来访问被屏蔽的域名。 4.HAProxy反向代理 HAProxy是一款高性能负载均衡和…

    行业资讯 2024年5月12日
    0
  • dns被污染图片

    如果DNS 遭到破坏,恶意软件可能会利用此漏洞将用户的网络流量重定向到指定的服务器。这样,您的网络流量就可能被黑客监控或修改,给您带来安全风险。 7.影响互联网的发展 DNS污染不…

    行业资讯 2024年5月12日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注