mirror of
https://github.com/rosenbjerg/FFMpegCore.git
synced 2025-12-14 10:05:44 +00:00
74 lines
1.9 KiB
C#
74 lines
1.9 KiB
C#
using FFMpegCore.FFMPEG.Pipes;
|
|
using Instances;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Diagnostics;
|
|
using System.IO;
|
|
using System.IO.Pipes;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace FFMpegCore.FFMPEG.Argument
|
|
{
|
|
public class InputPipeArgument : Argument, IInputPipe
|
|
{
|
|
public string PipeName { get; private set; }
|
|
public IPipeSource Source { get; private set; }
|
|
|
|
private NamedPipeServerStream pipe;
|
|
|
|
public InputPipeArgument(IPipeSource source)
|
|
{
|
|
Source = source;
|
|
PipeName = "FFMpegCore_Pipe_" + Guid.NewGuid();
|
|
}
|
|
|
|
public void OpenPipe()
|
|
{
|
|
if (pipe != null)
|
|
throw new InvalidOperationException("Pipe already has been opened");
|
|
|
|
pipe = new NamedPipeServerStream(PipeName);
|
|
}
|
|
|
|
public void ClosePipe()
|
|
{
|
|
pipe?.Dispose();
|
|
pipe = null;
|
|
}
|
|
|
|
public void Write(byte[] buffer, int offset, int count)
|
|
{
|
|
if(pipe == null)
|
|
throw new InvalidOperationException("Pipe shouled be opened before");
|
|
|
|
pipe.Write(buffer, offset, count);
|
|
}
|
|
|
|
public Task WriteAsync(byte[] buffer, int offset, int count)
|
|
{
|
|
if (pipe == null)
|
|
throw new InvalidOperationException("Pipe shouled be opened before");
|
|
|
|
return pipe.WriteAsync(buffer, offset, count);
|
|
}
|
|
|
|
public override string GetStringValue()
|
|
{
|
|
return $"-y {Source.GetFormat()} -i \\\\.\\pipe\\{PipeName}";
|
|
}
|
|
|
|
public void FlushPipe()
|
|
{
|
|
pipe.WaitForConnection();
|
|
Source.FlushData(this);
|
|
}
|
|
|
|
|
|
public async Task FlushPipeAsync()
|
|
{
|
|
await pipe.WaitForConnectionAsync();
|
|
await Source.FlushDataAsync(this);
|
|
}
|
|
}
|
|
}
|