通过 init.d 启动脚本启动时 ffmpeg 流运行效率低下

通过 init.d 启动脚本启动时 ffmpeg 流运行效率低下

我使用 ffmpeg 在树莓派 4 上流式传输视频/音频,使用以下命令

ffmpeg -re -f v4l2 -input_format h264 -thread_queue_size 512 -i ${video_device} -re -f alsa -thread_queue_size 512 -itsoffset 0 -i "default:CARD=C920" -acodec aac -vf drawtext="fontsize=48: box=1: [email protected]: boxborderw=2: fontcolor=white: x=(w-text_w)/1.1: y=((h-text_h)/1.4)+((h-text_h)/4): text='%{localtime\:%H\\\\\:%M\\\\\:%S}'" -vcodec libx264 -b:v 256k -r 10 -tune zerolatency -strict -2 -f mpegts -flush_packets 1 udp://192.168.116.13:5000?pkt_size=512

如果我手动运行此代码,它效果很好(流媒体效果很好,有 1-2 秒的延迟)。

为了开机自动启动,我准备了一个初始化文件脚本并使用更新-rc.d。到目前为止没有问题。如果我使用手动启动脚本

sudo service myscript start

我得到了同样好的表现。但当它在启动时启动时,流媒体性能很差(声音有约 10 的延迟,有时声音中断,有时视频暂停......)。

我跑

ps aux

分为手动启动和自动启动。有趣的是,当它在启动时启动时,CPU 使用率 (87.3%) 比手动启动 (189%) 低得多,这可能意味着手动启动使用更多线程,从而带来更好的性能。

关于为什么当我在启动时开始流式传输时,流式传输性能会变得更差,有什么想法吗?以及如何纠正这个问题?

更新(在@JonasBerlin 发表评论之后):

在这两种情况下(手动启动和启动时启动),我都以用户身份运行命令圆周率

ls -l /proc/<pid>/fd

给出以下输出。

手动启动(流媒体性能好,CPU 使用率高)

lr-x------ 1 pi pi 64 Feb  7 15:30 0 -> /dev/null
lrwx------ 1 pi pi 64 Feb  7 15:30 1 -> 'socket:[18561]'
lrwx------ 1 pi pi 64 Feb  7 15:30 2 -> 'socket:[18561]'
lrwx------ 1 pi pi 64 Feb  7 15:30 3 -> /dev/video0
lr-x------ 1 pi pi 64 Feb  7 15:30 4 -> /dev/snd/timer
lrwx------ 1 pi pi 64 Feb  7 15:30 5 -> /dev/snd/pcmC1D0c
lrwx------ 1 pi pi 64 Feb  7 15:30 6 -> 'socket:[17677]'

启动时启动(流性能差、CPU 使用率低)

lr-x------ 1 pi pi 64 Feb  7 15:29 0 -> /dev/null
lrwx------ 1 pi pi 64 Feb  7 15:29 1 -> 'socket:[16471]'
lrwx------ 1 pi pi 64 Feb  7 15:29 2 -> 'socket:[16471]'
lrwx------ 1 pi pi 64 Feb  7 15:29 3 -> /dev/video0
lr-x------ 1 pi pi 64 Feb  7 15:29 4 -> /dev/snd/timer
lrwx------ 1 pi pi 64 Feb  7 15:29 5 -> /dev/snd/pcmC1D0c
lrwx------ 1 pi pi 64 Feb  7 15:29 6 -> 'socket:[17332]'

相关内容