mirror of
https://github.com/BililiveRecorder/BililiveRecorder.git
synced 2024-11-16 11:42:22 +08:00
Add test for FfmpegDetectionRule
This commit is contained in:
parent
d0c7863c9d
commit
8aa53b5b30
|
@ -2,6 +2,18 @@ namespace BililiveRecorder.Flv.Amf
|
|||
{
|
||||
public static class ScriptTagBodyExtensions
|
||||
{
|
||||
public static ScriptDataEcmaArray? GetMetadataValue(this ScriptTagBody body) => body.Values.Count > 1 ? body.Values[1] as ScriptDataEcmaArray : null;
|
||||
public static ScriptDataEcmaArray? GetMetadataValue(this ScriptTagBody body)
|
||||
{
|
||||
if (body.Values.Count > 1)
|
||||
{
|
||||
return body.Values[1] switch
|
||||
{
|
||||
ScriptDataEcmaArray array => array,
|
||||
ScriptDataObject oect => oect,
|
||||
_ => null
|
||||
};
|
||||
}
|
||||
else return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -18,7 +18,7 @@ namespace BililiveRecorder.Flv.Pipeline.Rules
|
|||
if (!this.LavfEncoderDetected && context.Actions.Any(action =>
|
||||
{
|
||||
if (action is PipelineScriptAction scriptAction
|
||||
&& (scriptAction?.Tag?.ScriptData?.GetMetadataValue()?.Value?.TryGetValue("encoder", out var encoderValue) ?? false)
|
||||
&& (scriptAction?.Tag?.ScriptData?.GetMetadataValue()?.TryGetValue("encoder", out var encoderValue) ?? false)
|
||||
&& encoderValue is ScriptDataString encoder)
|
||||
return encoder.Value.StartsWith("Lavf", StringComparison.Ordinal);
|
||||
return false;
|
||||
|
|
|
@ -0,0 +1,64 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using BililiveRecorder.Flv.Amf;
|
||||
using BililiveRecorder.Flv.Pipeline;
|
||||
using BililiveRecorder.Flv.Pipeline.Actions;
|
||||
using BililiveRecorder.Flv.Pipeline.Rules;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Xunit;
|
||||
|
||||
namespace BililiveRecorder.Flv.Tests.RuleTests
|
||||
{
|
||||
public class FfmpegDetectionRuleTests
|
||||
{
|
||||
[Theory]
|
||||
[MemberData(nameof(EndTagTestData))]
|
||||
public void ShouldDetectEndTag(bool expectEndTag, PipelineAction pipelineAction)
|
||||
{
|
||||
var rule = new FfmpegDetectionRule();
|
||||
var pipeline = new ProcessingPipelineBuilder(new ServiceCollection().BuildServiceProvider()).Add(rule).Build();
|
||||
|
||||
var context = new FlvProcessingContext(pipelineAction, new Dictionary<object, object?>());
|
||||
|
||||
pipeline(context);
|
||||
|
||||
Assert.Equal(expectEndTag, rule.EndTagDetected);
|
||||
}
|
||||
|
||||
private static IEnumerable<object[]> EndTagTestData()
|
||||
{
|
||||
yield return new object[] { true, new PipelineEndAction(new Tag()) };
|
||||
yield return new object[] { false, new PipelineScriptAction(new Tag()) };
|
||||
yield return new object[] { false, new PipelineHeaderAction(Array.Empty<Tag>()) };
|
||||
yield return new object[] { false, new PipelineDataAction(Array.Empty<Tag>()) };
|
||||
yield return new object[] { false, PipelineNewFileAction.Instance };
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[InlineData(true, @"[{""Type"":""String"",""Value"":""onMetaData""},{""Type"":""Object"",""Value"":{""encoder"":{""Type"":""String"",""Value"":""Lavf56.40.101""}}}]")]
|
||||
[InlineData(true, @"[{""Type"":""String"",""Value"":""onMetaData""},{""Type"":""EcmaArray"",""Value"":{""encoder"":{""Type"":""String"",""Value"":""Lavf56.40.101""}}}]")]
|
||||
[InlineData(true, @"[{""Type"":""String"",""Value"":""onMetaData""},{""Type"":""Object"",""Value"":{""encoder"":{""Type"":""String"",""Value"":""Lavf56.40.101""}}},{""Type"":""Null""}]")]
|
||||
[InlineData(true, @"[{""Type"":""String"",""Value"":""onMetaData""},{""Type"":""Object"",""Value"":{""encoder"":{""Type"":""String"",""Value"":""Lavf123""}}}]")]
|
||||
[InlineData(false, @"[{""Type"":""String"",""Value"":""onMetaData""},{""Type"":""EcmaArray"",""Value"":{""encoder"":{""Type"":""String"",""Value"":""libobs xxxx""}}}]")]
|
||||
[InlineData(false, @"[{""Type"":""String"",""Value"":""onMetaData""},{""Type"":""EcmaArray"",""Value"":{}}]")]
|
||||
[InlineData(false, @"[{""Type"":""String"",""Value"":""onMetaData""},{""Type"":""Object"",""Value"":{}}]")]
|
||||
[InlineData(false, @"[{""Type"":""String"",""Value"":""aaa""},{""Type"":""Object"",""Value"":{}}]")]
|
||||
public void ShouldDetectLvafEncoder(bool expectedValue, string metadataJson)
|
||||
{
|
||||
var rule = new FfmpegDetectionRule();
|
||||
var pipeline = new ProcessingPipelineBuilder(new ServiceCollection().BuildServiceProvider()).Add(rule).Build();
|
||||
|
||||
var action = new PipelineScriptAction(new Tag
|
||||
{
|
||||
Type = TagType.Script,
|
||||
ScriptData = ScriptTagBody.Parse(metadataJson)
|
||||
});
|
||||
|
||||
var context = new FlvProcessingContext(action, new Dictionary<object, object?>());
|
||||
|
||||
pipeline(context);
|
||||
|
||||
Assert.Equal(expectedValue, rule.LavfEncoderDetected);
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user