2023年2月

最近经常被一些很简单的事情绊住,天天把时间浪费在这些上面,很烦。
昨天遇到的问题是:我需要在linux(实际用的是sangoma linux 7)启动后直接进系统,无需登录,并且在进入系统后默认打开某些程序。我的系统是纯字符控制台。
以下是有效的做法:
一、系统自动登入
1、(先备份到合适位置后)修改gurb配置文件:
vi /etc/default/grub
在登陆命令行加入:quiet splash auto login=root
2、保存后使之生效:
grub2-mkconfig -o /etc/default/grub
3、重启就可以了。
二、系统启动后自动启动程序,并设置禁止关闭屏幕:
1、在默认登陆的用户主目录下,修改或者新建.bashrc文件:
vi ~/.bashrc
2、在文件末尾加入相应指令:
禁止关闭屏幕:setterm -blank 0
运行其它指令(自己随便写,每行一个)

前一段时间解决了一次ffmpeg拉大唐讯士的rtsp流出错的问题,之后又发现编码器时不时会没反应,拉取大唐讯士视频服务器rtsp流的时候总是一直等待;使用vlc播放却没问题。想了一下,应该是需要指定rtsp流类型。
试了一下指定rtsp流类型为tcp,就解决了。
具体做法是在-i前面加上:-rtsp_transport tcp。比如:
ffmpeg -rtsp_transport tcp -i...........

----20230220更新----
在我的系统里,我用的是udp。
使用tcp,会导致转换速率越来越慢、直至停止的情况。udp就直接丢弃错误,速度会比较快。

10日开始到现场设摊子,14日导播结束,15日休息了一天,16日下午自己把导播台提了上来开始改。根据这几天实际使用的心得,成功进行了以下改动和扩展:
1.输出接口从1个录机输出的sdi,扩展成为三个导播台直出的sdi、一个录机出的sdi,并且多了一个录机直出的hdmi接口。以后就不用带着sdi转hdmi盒子了。目前总共四路sdi输出,足够用了。
2.做了一根适配270摄像机的电源线,以后270摄像机也能用在便携式导播台系统里面了。
3.修复了导播台高清输入口。以前是因为高清线不知道被谁拔掉了,接上以后,三个高清输入全都能用了。目前是四个sdi输入、一个dvi输入(高清口变的),三个hdmi输入,还能进三路av信号,但是得在切换台上略微设置一下。切换台同时只能在上面任选八个信号。
4.修复了音频输入。目前可以输入三个音频,其中两个是单声道的三芯卡农,一个是大三芯3.5的,插了一个转2.5的孔,可以接笔记本电脑之类的设备。
5.去掉了一个本来就没有接线的通话器插座。目前还有一个通话器插座是空的,是个五芯的。以后有机会,买个五芯的插头给它接上。目前能用的通话是六路,以后还能扩展一路,凑够八路。
6.画了个说明图,贴到后面了,方便以后随时查看,免得再像以前那样需要不断的测试才能知道接口功能。
改动花了半个下午,17日早上上了班就装起来了。很简单的操作。
下一步,打算再做一根270的适配线,然后测试一下每一路的通话功能。

这个台子是单位买了很多年的设备。只支持到1080i,连1080p都不支持,早就落后的一塌糊涂。
但就是这么一个旧玩意,在这种地方也玩不转。
真是没法说。
现在都是wmix的时代了。以后有时间再好好搞一搞wmix,试试学一下会议导播之类的。到时候弄一个支持rtsp或者rtmp的网络摄像头,就能直接进wmix,方便极了。

在从大唐讯士编码器拉取rtsp流并编码成flv推送时,ffmpeg经常出现无反应和出错退出的现象。使用vlc player测试没问题。
在ffmpeg出错时,看到以下错误:
[aac @ 000001bed96fa240] Too many bits 8832.000000 > 6144 per frame requested, clamping to max
[libx264 @ 000001bed973bdc0] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2 AVX512
[libx264 @ 000001bed973bdc0] profile High, level 3.1, 4:2:0, 8-bit

以及:
Failed to update header with correct duration.
Failed to update header with correct filesize.

所以原因是在合成flv文件结束时,ffmpeg用该文件时长和大小值生成文件头(添加到文件开头)。但是在传输流时,就不存在文件时长和大小这两个参数,无法生成该文件头,所以就会出现这种问题。
解决办法是在编码参数中添加一个no_duration_filesize的标志,如下:
... -f flv -flvflags no_duration_filesize "..."

至此解决。