打印
[STM32F7]

STM32F769 Disc音频播放之四:播放网络音频流

[复制链接]
3222|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
也许板块刚刚开张, 分外冷清, 还是**把这个系列弄完结吧.

不知道现在论坛上的朋友们大致什么年龄段, 本人是80后, 最后赶上一点广播的尾巴. 高中的时候用收音机听外国电台学英语, 号称学英语其实也有不少敌台也收听过一些. 当然这是另外一个故事. 扯到广播的意思是, 现如今传统的AM, FM, SW这些技术已经快彻底消亡了(如果没有完全消失,也只是很少人听了). 为什么呢, 主要还是数字传输的迅猛发展吧, 音质稳定性上大大超过了这些模拟传输的老技术. 有几个国家现在试验的DAB,也不过是一个过渡技术. 最终一统江湖的, 肯定是基于IP的4G,5G,WiFi这种纯数字通信, 也就是常说的互联网.

收音机成了古董之后, 现在的人都是在用互联网来听电台. 虽然在视频技术的冲击下, 纯音频的听众应该说比以前比例少了, 但是我觉得纯音频永远不会淘汰, 有它的特殊性. 比如半睡半醒间, 听着电台播放的轻音乐或者谈话节目入睡是很多人的习惯, 如果是视频, 就很难这样的效果.

扯了半天还是回来说互联网电台广播的技术吧.

互联网广播各大公司都在做, Adobe,Apple,Microsoft都有自己的专门的平台(一般和视频一起做的). 这些都是互联网流媒体技术的前沿, 这里想说的是另一种, 应用最广泛的, 对硬件,带宽需求最低的技术:
Shoutcast系列协议.

因为对硬件需求, 带宽需求最低, 所以这个系列的协议被广泛支持. 大多数的互联网流媒体源在支持某种高码率的协议的同时,一搬都会也支持这种低码率的Shoutcast协议, 以便更广泛的听众能够收听.

这个协议有很多变种, 但是因为本身很简单(可以说是一种HTTP协议的变种), 所以变种都也没有很值得一提的不同点. 这里以BBC公司的低码率协议为例介绍一下.

这是抓包图:

可以看出来很简单.
以这个播放文件为例, 细究一下. eieuk.zip (293 Bytes)
.pls, .m3u8, .asx都是播放列表文件, 只是格式不同而已,都包含有要播放的网址, 标题不同而已, 其中.pls因为是最初winamp使用的, 用的比较广泛, 这里以他为例:
[playlist]
numberofentries=2
File1=http://bbcwssc.ic.llnwd.net/stream/bbcwssc_mp1_ws-eieuk
Title1=BBC World Service Online
Length1=-1
File2=http://bbcwssc.ic.llnwd.net/stream/bbcwssc_mp1_ws-eieuk_backup
Title2=BBC World Service Online
Length2=-1
两个URL都可以播放, 第二个是backup先不管了. 把第一个的网址分成两部分:
bbcwssc.ic.llnwd.net
/stream/bbcwssc_mp1_ws-eieuk
来构建请求包:
'GET /stream/bbcwssc_mp1_ws-eieuk HTTP/1.1\r\nHost: bbcwssc.ic.llnwd.net\r\nUser-Agent: VLC/2.2.4 LibVLC/2.2.4\r\nRange: bytes=0-\r\nConnection: close\r\nIcy-MetaData: 1\r\n\r\n'
发给服务器就可以了, 跟HTTP非常类似,但是服务器的回复有时不是标准的HTTP的回复故此不能使用标准的http库函数来, 要用socket来做,否则兼容性不好.
BBC服务器的回复则是这样的:
<font color="Black">HTTP/1.0 200 OK
Content-Type: audio/mpeg
icy-bitrate:48
icy-description:BBC World Service Online
icy-genre:BBC
icy-name:BBC World Service Online
icy-private:0
icy-public:1
icy-url:http://www.bbcworldservice.com
<b><font color="Red">icy-metaint:8192</font></b>
Server: Limecast 2.0.0
</font>
当然有时也大同小异, 其中有用的就是内容格式(低码率的一般mp3, 高码率的一搬AAC)与metaint那一行, metaint的值表明每隔多少数据就有Metadata, 这个不能当做音频数据来播放, 不然听到卡卡的. 要用软件过滤掉的.
关于Metadata请参考这个页面:
Shoutcast Metadata Protocol
其后就是音频流数据了(夹杂着metadata). 有的服务器提供了icy-bitrate的信息,可以通过这个来估算处理数据的间隔与buffer大小, 但是有的服务器没有这个信息, 所以不能依赖这个了.

大概就这么多了, 因为这个音频系列的好像关注的人少,这个内容我还没有弄到板子上跑. 只在桌面上用python脚本模拟了一下. 以后有时间做出来再来发.



评分
参与人数 1威望 +2 收起 理由
294479435 + 2
沙发
colin2135| | 2017-1-11 11:52 | 只看该作者
这么好的帖子,竟然没人顶。加油加油!

使用特权

评论回复
板凳
liu553824989| | 2017-1-12 22:44 | 只看该作者

这么好的帖子,竟然没人顶。加油加油!

使用特权

评论回复
地板
usysm| | 2017-1-21 17:28 | 只看该作者
这个看着真的非常高端。

使用特权

评论回复
5
usysm| | 2017-1-21 17:32 | 只看该作者
如果用vs1003开发怎么样

使用特权

评论回复
6
zhanzr21|  楼主 | 2017-1-21 17:41 | 只看该作者
网络获取音频流部分是一样的, 获取了内容进行播放就是
只是我做实验用的软件解码
我这个系列前面有帖子讲软件解码
网络+软件解码的合并代码我准备在下一个帖子中传上来

使用特权

评论回复
7
febgxu| | 2017-1-26 22:01 | 只看该作者
很厉害。

使用特权

评论回复
8
febgxu| | 2017-1-26 22:03 | 只看该作者
这个做起来简单吗?

使用特权

评论回复
9
zhanzr21|  楼主 | 2017-1-27 00:25 | 只看该作者
我在F769上做了一部分了, 还有一点bug, 年后完成后另外发贴

使用特权

评论回复
10
nyszx| | 2017-1-28 16:47 | 只看该作者
很厉害,支持楼主,之前有研究过RTSP,RTP,MMS协议,想用F1或F4+VS1053做一个网络收音机,听听电台,但是断断续续的没有完成,希望楼主能做出来,支持!

使用特权

评论回复
11
jinggx| | 2017-2-18 22:29 | 只看该作者
强帖,给楼主打打气,希望早日看到结果

使用特权

评论回复
12
zhanzr21|  楼主 | 2017-2-18 23:25 | 只看该作者
多谢支持,还有点bug,这段时间稍为有点忙,修复了bug就上传所有资料代码

使用特权

评论回复
13
zjh2009| | 2017-2-20 20:55 | 只看该作者
这个很不错,只是手边没有带网络和功放的板子。**搞完,谢谢

使用特权

评论回复
14
mnh12232| | 2019-6-30 10:24 | 只看该作者
顶贴,楼主 没有持续下去呀,。。。想学习跟着做一个网络音乐播放器呢

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:每天都進步

91

主题

1013

帖子

34

粉丝