最近开发广播服务器功能的一些记录



广播服务器最近在逐步完善中,添加很多必须的功能。

呱牛笔记

比方监听,主要使用场景是广播在播放歌曲的时候,服务器监听广播是否有正常在播放;需要广播通过mic采集播放出来的声音,然后回传给服务器,服务器将音频流再播放出来,这里包括两个点:

1、广播播放音乐过程中进行录音,碰到的问题是一直打不开录音设备,原来rv1106声卡是同一个声卡,如果声卡已经打开进行播放,然后再打开声卡采集的时候,需要采集的参数与播放的参数相同,否则会出现参数配置失败。

2、广播服务器监听UDP端口,接收广播发送的声卡采集的音频流,这里音频流使用RTP+PCMU的格式组包,之前做过类似的功能,广播服务器播放声音总是怪怪的,但使用SDL提供的音频播放接口进行播放,就正常了,但是耳机只有一边有声音,可能问题出在声道的处理上,广播采集是2声道的声音,怎么到了广播服务器,却成了一个声道,是不是很奇怪的问题。


比方广播声卡采集分发给其他的广播功能,由于有了上面监听功能的实现,声卡采集分发给其他的广播功能就显得很顺利了。



再比方音频播放曲目列表的播放同步,这里播放还是采用文件分发的方式,实现了一个文件离线缓存队列和缓存方案,这个很关键,由于rv1106使用的spi存储只有128M FLASH,存储的文件需要采用覆盖的方式,增加LRU的策略保存热点MP3文件到/tmp分区,调试的过程也不是那么顺利。


再比方离线任务的配置下发,主要是将打铃的离线任务配置下发给广播,然后再在广播上配置离线任务,使用了一个离线任务播放脚本模版,然后配置不同的离线任务定时器,这个实现也是比较巧妙的,巧妙的点就在于避免了定时任务参数上传。

crond的任务列表:

55 4 26 7 * /tmp/offline/play_offline_5.sh
59 10 * * 1,2,3,4,5 /tmpoffline/play_offline_10.sh
#!/bin/bash

 
json_file="/tmp/offline_task.json"    
id=%s
play_duration=%d
music_url=%s
volume=%d

 
echo "play $music_url" > /tmp/play_offline_task
if [[ -f "$music_url" ]]; then
	/mnt/UDISK/app/bas p $music_url $play_duration $volume
fi

将播放时长和播放音量都进行了控制。


批量告警任务的实现界面。

呱牛笔记


总的来说,就是越来越解决一个成熟的广播产品了。


-------------------广告线---------------
项目、合作,欢迎勾搭,邮箱:promall@qq.com


本文为呱牛笔记原创文章,转载无需和我联系,但请注明来自呱牛笔记 ,it3q.com

请先登录后发表评论
  • 最新评论
  • 总共0条评论