Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.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
C# 使用命名管道/流转换并输出到流不包含流持续时间_C#_Video_Ffmpeg_Namedpipeserverstream - Fatal编程技术网

C# 使用命名管道/流转换并输出到流不包含流持续时间

C# 使用命名管道/流转换并输出到流不包含流持续时间,c#,video,ffmpeg,namedpipeserverstream,C#,Video,Ffmpeg,Namedpipeserverstream,我集成了一个API,它向我们发送一个带有H.264编解码器的FLV。 我使用FFMpeg(FFMpegCore,一个与FFMpeg交互的C#库)将容器转换为一个片段化的MP4容器。 然后将结果流式传输到resp.OutputStream,并下载文件 但是,结果不包含流持续时间,Windows Media Player无法浏览该文件 该流通过以下代码进行处理: FFMpegArguments .FromPipe(new StreamPipeSource(inputStream)) .WithVid

我集成了一个API,它向我们发送一个带有H.264编解码器的FLV。 我使用FFMpeg(FFMpegCore,一个与FFMpeg交互的C#库)将容器转换为一个片段化的MP4容器。 然后将结果流式传输到resp.OutputStream,并下载文件

但是,结果不包含流持续时间,Windows Media Player无法浏览该文件

该流通过以下代码进行处理:

FFMpegArguments
.FromPipe(new StreamPipeSource(inputStream))
.WithVideoCodec("copy")
.ForceFormat("mp4")
.WithArgument(new FragArgument())
.OutputToPipe(new StreamPipeSink(resp.OutputStream))
.ProcessSynchronously(false);
大致相当于以下命令:

type "Input.flv" | ffmpeg -i - -vcodec copy -f mp4 -movflags frag_keyframe+empty_moov pipe:1 > Output.mp4
(FragArgument是我自己创建的东西,它只是将
-movflags frag_keyframe+empty_moov
添加到命令中)

输出流的持续时间为0。媒体播放器(如VLC)似乎能够计算持续时间,但客户端无法使用VLC Media player,而必须使用Windows Media player,后者能够播放文件,但无法正确记录持续时间

我对处理视频流很陌生,但缺少持续时间似乎是muxer所做的事情

我想,如果我将非碎片化的mp4输出到本地文件,然后将其流式传输到服务器,那么我可以获得流持续时间。然而,额外的步骤将增加下载时间,我将不得不担心删除文件后,我试图避免这样做


如何在不首先保存到文件的情况下使流包含正确的持续时间?

听起来您的问题可能是由于moov atom位于末尾造成的。您可以尝试添加
。WithFastStart()
,让ffmpeg将其移到开头吗?我将在周一尝试,这是我下一次可以尝试的时间。我今天早上尝试了它-下载结果为0kb,因此我怀疑它由于某种原因而失败。稍后有机会我会做一些调试。直接在终端中使用ffmpeg命令args时,它是否有效?好问题。我刚刚尝试使用:
type“input.flv”| ffmpeg-I--vcodec copy-f mp4-movflags frag_keyframe+empty_moov+faststart pipe:1>Output.mp4
No dice,结果与之前相同,没有流持续时间。虽然我知道为什么
FFMpegCore.WithFastStart()
现在失败了,但它应该添加2个
-movflag
参数