diff --git a/src/JT1078.Flv.Test/Audio/AudioTest.cs b/src/JT1078.Flv.Test/Audio/AudioTest.cs new file mode 100644 index 0000000..0548dc8 --- /dev/null +++ b/src/JT1078.Flv.Test/Audio/AudioTest.cs @@ -0,0 +1,62 @@ +using JT1078.Flv.Audio; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Linq; +using System.Text; +using Xunit; +using Xunit.Abstractions; + +namespace JT1078.Flv.Test.Audio +{ + public class AudioTest + { + readonly ITestOutputHelper output; + + public AudioTest(ITestOutputHelper output) + { + this.output = output; + } + + /// + /// 8000采样,单通道,16位pcm->aac + /// 8k-1ch-16bit + /// + [Fact(DisplayName = "pcm编码aac")] + public void Test1() + { + ReadOnlySpan fileData = File.ReadAllBytes(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, $"Audio/Files/testpacket.pcm")); + //注意 这里为了可以判断音频是否可用,因此使用adts,当网络传输的时候不应该使用adts + var faac = new FaacEncoder(8000, 1, 16, true); + var path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"Audio\Files\testpacket.aac"); + if (File.Exists(path)) File.Delete(path); + output.WriteLine(path); + var offset = 0; + var step = faac.frameSize; + var totalBytes = 0; + var stopwatch = new Stopwatch(); + while (offset + step < fileData.Length) + { + stopwatch.Start(); + var aacBuff = faac.Encode(fileData.Slice(offset, step).ToArray()); + stopwatch.Stop(); + if (aacBuff.Any()) + aacBuff.AppendBytesToFile(path); + offset += step; + totalBytes += aacBuff.Length; + } + faac.Dispose(); + output.WriteLine($"已编码字节数:{offset},剩余未编码字节数:{fileData.Length - offset},编码后字节数:{totalBytes},耗时:{stopwatch.Elapsed.Milliseconds}毫秒"); + } + } + static class Ex + { + public static void AppendBytesToFile(this byte[] fileBytes, string fileName) + { + FileStream fileStream = new FileStream(fileName, FileMode.Append); + fileStream.Write(fileBytes, 0, fileBytes.Length); + fileStream.Close(); + } + } +} diff --git a/src/JT1078.Flv.Test/Audio/Files/testpacket.pcm b/src/JT1078.Flv.Test/Audio/Files/testpacket.pcm new file mode 100644 index 0000000..69c24b1 Binary files /dev/null and b/src/JT1078.Flv.Test/Audio/Files/testpacket.pcm differ diff --git a/src/JT1078.Flv.Test/JT1078.Flv.Test.csproj b/src/JT1078.Flv.Test/JT1078.Flv.Test.csproj index 508f4dc..938f334 100644 --- a/src/JT1078.Flv.Test/JT1078.Flv.Test.csproj +++ b/src/JT1078.Flv.Test/JT1078.Flv.Test.csproj @@ -33,6 +33,9 @@ + + Always + Always @@ -48,6 +51,9 @@ Always + + Always + diff --git a/src/JT1078.Flv.Test/Libs/libfaac.dll b/src/JT1078.Flv.Test/Libs/libfaac.dll new file mode 100644 index 0000000..a67c71f Binary files /dev/null and b/src/JT1078.Flv.Test/Libs/libfaac.dll differ diff --git a/src/JT1078.Flv/JT1078.Flv.csproj b/src/JT1078.Flv/JT1078.Flv.csproj index 1cfddf8..c5ef381 100644 --- a/src/JT1078.Flv/JT1078.Flv.csproj +++ b/src/JT1078.Flv/JT1078.Flv.csproj @@ -46,7 +46,7 @@ - Always + PreserveNewest diff --git a/src/JT1078.Flv/Libs/libfaac.dll b/src/JT1078.Flv/Libs/libfaac.dll index c9f2e45..a67c71f 100644 Binary files a/src/JT1078.Flv/Libs/libfaac.dll and b/src/JT1078.Flv/Libs/libfaac.dll differ