C#의 FLV 스트림에서 오디오 스트림을 추출하고 싶습니다. Google에서 검색 한 결과 FLVExtract이 발견되었지만 스트림이 아닌 FLV 파일에서만 추출 할 수 있습니다.C에서 FLV 스트림의 오디오 추출 #
어떻게하면됩니까?
C#의 FLV 스트림에서 오디오 스트림을 추출하고 싶습니다. Google에서 검색 한 결과 FLVExtract이 발견되었지만 스트림이 아닌 FLV 파일에서만 추출 할 수 있습니다.C에서 FLV 스트림의 오디오 추출 #
어떻게하면됩니까?
아무 것도 찾지 못했기 때문에 직접 작성해야했습니다. 그것은 매우 빠르며 훌륭하게 작동합니다. 코드는 다음과 같습니다.
protected byte[] ExtractAudio(Stream stream)
{
var reader = new BinaryReader(stream);
// Is stream a Flash Video stream
if (reader.ReadChar() != 'F' || reader.ReadChar() != 'L' || reader.ReadChar() != 'V')
throw new IOException("The file is not a FLV file.");
// Is audio stream exists in the video stream
var version = reader.ReadByte();
var exists = reader.ReadByte();
if ((exists != 5) && (exists != 4))
throw new IOException("No Audio Stream");
reader.ReadInt32(); // data offset of header. ignoring
var output = new List<byte>();
while (true)
{
try
{
reader.ReadInt32(); // PreviousTagSize0 skipping
var tagType = reader.ReadByte();
while (tagType != 8)
{
var skip = ReadNext3Bytes(reader) + 11;
reader.BaseStream.Position += skip;
tagType = reader.ReadByte();
}
var DataSize = ReadNext3Bytes(reader);
reader.ReadInt32(); //skip timestamps
ReadNext3Bytes(reader); // skip streamID
reader.ReadByte(); // skip audio header
for (int i = 0; i < DataSize - 1; i++)
output.Add(reader.ReadByte());
}
catch
{
break;
}
}
return output.ToArray();
}
private long ReadNext3Bytes(BinaryReader reader)
{
try
{
return Math.Abs((reader.ReadByte() & 0xFF) * 256 * 256 + (reader.ReadByte() & 0xFF)
* 256 + (reader.ReadByte() & 0xFF));
}
catch
{
return 0;
}
}
오디오 스트림이있는 flv 비디오가 있지만 작동하지 않습니다. – greatmajestics
제발 날 받아 줄 수 없나요? Alon Gubkin. 위에 제공된 코드는 작동하지 않습니다. – greatmajestics
오디오 포맷의 형식은 무엇입니까? MP3? – Charles