Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Html 如何在段中录制UDP流,FFmpeg_Html_Windows_Ffmpeg_Udp - Fatal编程技术网

Html 如何在段中录制UDP流,FFmpeg

Html 如何在段中录制UDP流,FFmpeg,html,windows,ffmpeg,udp,Html,Windows,Ffmpeg,Udp,我正在寻找一种方法来记录一个UDP流连续在30分钟段和编码上的GPU现场。我想把录音的日期和时间烧录到剪辑中,并连续录制(24/7) 我尝试了以下方法: ffmpeg -i udp://source:port -c copy -flags +global_header -f segment -segment_time 1800 -segment_format_options movflags=+faststart -reset_timestamps 1 show_{Date}_{Time}.mp

我正在寻找一种方法来记录一个UDP流连续在30分钟段和编码上的GPU现场。我想把录音的日期和时间烧录到剪辑中,并连续录制(24/7)

我尝试了以下方法:

ffmpeg -i udp://source:port -c copy -flags +global_header -f segment -segment_time 1800 -segment_format_options movflags=+faststart -reset_timestamps 1 show_{Date}_{Time}.mp4
{Date}
{Time}
是保存FFmpeg启动时间的变量

这会正确地记录我的片段,但是,如果流中的信号丢失,它会崩溃,不会继续录制或自行备份,并且不会将当前时间或日期烧录到输出视频中

我需要它能在html5中播放,这就是我为什么要做mp4的原因

我已经解决了这个问题

我设置了一个在任务调度器上运行的批处理文件。每30分钟触发一次

ffmpeg -hwaccel cuvid -y -i {udp} -vf "drawtext=fontfile=calibrib.tff:fontsize=25:text='{ChannelName} %{localtime}': x=10: y=10: fontcolor=white: box=1: boxcolor=0x000000" -pix_fmt yuv420p -vsync 1 -c:v h264_nvenc -r 25 -threads 0  -b:v 1M -profile:v main -minrate 1M -maxrate 1M -bufsize 10M -sc_threshold 0 -c:a aac -b:a 128k -ac 2 -ar 44100 -af "aresample=async=1:min_hard_comp=0.100000:first_pts=0" -bsf:v h264_mp4toannexb -t 00:30:00 {output}\{ChannelName}\{ChannelName}_{year}_{monthno}_{day}__{Hours}_{Minutes}_{Seconds}.mp4
{}
中的文件名是我的变量

文件输出后,im运行修剪功能

Trim(修剪)功能从文件夹中选择所有.mp4文件,以修剪视频的第一分钟


使用
-ss 00:01:00
-t 00:31:00
但不编码,因此我使用
-codec copy-map 0 output.mp4

为什么不将ffmpeg放在while循环中?这样做,在切换ffmpeg命令之间会丢失帧。我尝试了while循环。我在视频的开始和结束时都会进行像素化,我需要指定它每30分钟开始一次。正确执行该操作的唯一方法是使用API。打开UDP流并获取帧。每30分钟打开一个新的输出文件。这样,原始输入流仍然打开并接收正确的帧。不能在脚本中执行此操作。UDP是原始数据,ffmpeg需要同步才能获得正确的第一帧,这就是为什么要获得像素化帧。