Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.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
Java 输入新图像时保持ffmpeg将图像转换为视频_Java_C++_Ffmpeg_Http Live Streaming - Fatal编程技术网

Java 输入新图像时保持ffmpeg将图像转换为视频

Java 输入新图像时保持ffmpeg将图像转换为视频,java,c++,ffmpeg,http-live-streaming,Java,C++,Ffmpeg,Http Live Streaming,有没有办法让ffmpeg转换传入HLS的图像,并随时停止 我正在使用ffmpeg将图像转换为m3u8/ts流媒体。摄像头设备将全天候发送图像,ffmpeg将在用户请求时转换这些图像,直到他们停止观看 现在,我用java网络从摄像机设备获取图像,然后将这些图像移到FFMPEG输入目录,并用C++转换。这是一个循环来完成这项工作,所以每次移动图像时都会执行新的ffmpeg 问题是剩下的ts文件太多,占用了服务器上的大量空间。所以我尝试用delete_segments选项删除这些片段,但由于每次都执行

有没有办法让ffmpeg转换传入HLS的图像,并随时停止

我正在使用ffmpeg将图像转换为m3u8/ts流媒体。摄像头设备将全天候发送图像,ffmpeg将在用户请求时转换这些图像,直到他们停止观看

现在,我用java网络从摄像机设备获取图像,然后将这些图像移到FFMPEG输入目录,并用C++转换。这是一个循环来完成这项工作,所以每次移动图像时都会执行新的ffmpeg

问题是剩下的ts文件太多,占用了服务器上的大量空间。所以我尝试用delete_segments选项删除这些片段,但由于每次都执行ffmpeg,所以它无法删除之前由ffmpeg生成的片段

以下是我考虑的一些方法:

  • 使用另一个函数删除文件,而不使用ffmpeg
  • 也许可以将图像直接传输到ffmpeg输入,并以某种方式使ffmpeg不断地将这些图像转换为ts(我想不出有什么办法)
  • 或者改变整个结构

  • 使用选项1会容易得多,但如果我可以使用ffmpeg自己的功能来实现这一点,那就太好了。

    您可以使用输入文件列表,它可以是一个特殊文件(例如FIFO管道)

    然后,您的命令可能如下所示:

    mkfifo mylist.pipe
    ffmpeg-f concat-safe 0-i mylist.pipe output.mkv
    
    您可以将每个图像添加到mylist.pipe,如下所示:

    echo "file '/path/to/image.png'"  >mylist.pipe
    echo "file '/path/to/image2.png'" >mylist.pipe
    
    如果路径是相对的,则不需要
    -safe 0
    部分


    请参见

    ffmpeg应自动更新图像,假设
    -i image.jpg
    ,并且每次需要更新时,另一个图像会自动重命名为
    image.jpg
    ,以替换旧图像。在没有看到你的命令的情况下,不能提出任何其他建议。看见