我正在用 ffmpeg 做这个......
nohup ffplay -reorder_queue_size 0 -nostats -i /tmp/stl-app/stream.sdp -protocol_whitelist "file,http,https,tcp,tls,udp,rtp" -nodisp -af astats=metadata=1:reset=1,ametadata=print:key=lavfi.astats.Overall.RMS_level &> /tmp/stl-app/stream-stats.log &
我遇到的问题是,我设置了 tmpfs 驱动器,其中有 100M 的可用空间。大约 90 分钟后,这些空间就用完了。我尝试将一个空白文件回显到 stream-stats.log 并将其删除。但由于 FFMPEG 写入文件的方式,如果我删除它,它就不会再写入该文件。我需要一种方法来每隔 x 分钟清除一次文件,或者至少将其限制为我可以继续读取的可管理大小。
我实际上只需要每秒左右更新一次,并且显然不需要保留文件。处理这个问题的正确方法是什么?
更新根据 @gyan 的推荐,我在 /tmp/stl-app/icecaststats 创建了一个管道,然后重新运行我的命令,如下所示
nohup ffplay -reorder_queue_size 0 -nostats -i /tmp/stl-app/stream.sdp -protocol_whitelist "file,http,https,tcp,tls,udp,rtp" -nodisp -af astats=metadata=1:reset=1,ametadata=print:key=lavfi.astats.Overall.RMS_level > /tmp/stl-app/icecaststats &
但由于某种原因我没有在那里得到任何数据?
答案1
所以对我来说一个可行的解决方案是更新 -af 标志
ffplay -autoexit -nodisp -f mp3 -i $ICECASTURL -af asetnsamples=44100,astats=metadata=1:reset=1,ametadata=print:key=lavfi.astats.Overall.RMS_level
设置 asetnsamples 告诉 ffplay 您想要多大的样本大小。由于我以 44100Hz 运行音频,因此我将样本大小设置为该频率,因此它每秒更新一次。大大减少了我登录的文件大小。