FFmpeg是一套可以用來記錄、轉換數字音頻、視頻,并能將其轉化為流的開源計算機程序。采用LGPL或GPL許可證。它提供了錄制、轉換以及流化音視頻的完整解決方案。它包含了非常先進的音頻/視頻編解碼庫libavcodec,為了保證高可移植性和編解碼質量,libavcodec里很多code都是從頭開發的。
FFmpeg在Linux平臺下開發,但它同樣也可以在其它操作系統環境中編譯運行,包括Windows、Mac OS X等。這個項目最早由Fabrice Bellard發起,2004年至2015年間由Michael Niedermayer主要負責維護。許多FFmpeg的開發人員都來自Mplay項目,而且當前FFmpeg也是放在MPlayer項目組的服務器上。項目的名稱來自MPEG視頻編碼標準,前面的"FF"代表"Fast Forward"。
解決方法
首先我們得先查詢后臺是否有ffmpeg進程
ps -aux
根據pid定位到所運行的ffmpeg進程,如果ffmpeg不結束,那么就會一直生成音視頻文件。
找到包括指定rstp視頻流的ffmpeg進程。
rint("出問題的id為======================================",device_id)rtsp_url = device_info['rtsp']rtsp_lower = rtsp_url.lower()for proc in psutil.process_iter(['pid', 'name', 'cmdline']):try:proc_name = proc.name().lower()proc_cmd = ' '.join(proc.cmdline()).lower() if proc.cmdline() else ''is_ffmpeg_proc = 'ffmpeg' in proc_name or 'ffmpeg' in proc_cmdif not is_ffmpeg_proc:continue # 不是FFmpeg進程,直接跳過# 3.2 再判斷是否包含當前設備的RTSP地址(確保是該設備對應的進程)if rtsp_lower in proc_cmd:logger.info(f"找到設備 {device_id} 對應的FFmpeg進程(PID: {proc.pid}),開始終止")# 嘗試正常終止,3秒超時后強制終止proc.terminate()# try:# proc.wait(timeout=3)# logger.info(f"FFmpeg進程(PID: {proc.pid})已正常終止")# except psutil.TimeoutExpired:proc.kill()