ATSC3 Segment extraction.
All checks were successful
🚀 Pack skyscraper8 / make-zip (push) Successful in 3m25s
All checks were successful
🚀 Pack skyscraper8 / make-zip (push) Successful in 3m25s
This commit is contained in:
parent
595ed5cd4f
commit
c3fff246d5
@ -39,6 +39,7 @@
|
|||||||
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AThrowHelper_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003Fe1ab690537c44e02a014076312b886b7b2e200_003F4f_003F7bfc5050_003FThrowHelper_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
|
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AThrowHelper_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003Fe1ab690537c44e02a014076312b886b7b2e200_003F4f_003F7bfc5050_003FThrowHelper_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
|
||||||
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AThrowHelper_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003Ffb63d7b4f026464dbf9b2db60c7f76bc2ac00_003Fbd_003F4080deac_003FThrowHelper_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
|
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AThrowHelper_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003Ffb63d7b4f026464dbf9b2db60c7f76bc2ac00_003Fbd_003F4080deac_003FThrowHelper_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
|
||||||
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ATuple_00602_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F57d616db882b441b8c50720b4477e03db2e200_003F9f_003F0d16f921_003FTuple_00602_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
|
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ATuple_00602_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F57d616db882b441b8c50720b4477e03db2e200_003F9f_003F0d16f921_003FTuple_00602_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
|
||||||
|
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AXmlSerializer_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2026_002E1_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F7d5324401ccb48a5b32c2bfdf42662547b5800_003Fb2_003F4570db6a_003FXmlSerializer_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
|
||||||
<s:String x:Key="/Default/Environment/AssemblyExplorer/XmlDocument/@EntryValue"><AssemblyExplorer>
|
<s:String x:Key="/Default/Environment/AssemblyExplorer/XmlDocument/@EntryValue"><AssemblyExplorer>
|
||||||
<Assembly Path="/home/schiemas/.dotnet/packs/Microsoft.NETCore.App.Ref/8.0.21/ref/net8.0/System.Windows.dll" />
|
<Assembly Path="/home/schiemas/.dotnet/packs/Microsoft.NETCore.App.Ref/8.0.21/ref/net8.0/System.Windows.dll" />
|
||||||
<Assembly Path="/home/schiemas/.nuget/packages/allure.net.commons/2.14.1/lib/netstandard2.0/Allure.Net.Commons.dll" />
|
<Assembly Path="/home/schiemas/.nuget/packages/allure.net.commons/2.14.1/lib/netstandard2.0/Allure.Net.Commons.dll" />
|
||||||
|
|||||||
@ -4,27 +4,68 @@ using System.Linq;
|
|||||||
using System.Net;
|
using System.Net;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
using System.Xml;
|
||||||
|
using skyscraper8.Atsc.A331.Schema;
|
||||||
|
|
||||||
namespace skyscraper8.Atsc.A331
|
namespace skyscraper8.Atsc.A331
|
||||||
{
|
{
|
||||||
internal class Atsc3FilenameTable
|
internal class Atsc3FilenameTable
|
||||||
{
|
{
|
||||||
private List<Tuple<IPEndPoint, ulong, string>> staticFilenames;
|
private List<Tuple<IPEndPoint, ulong, string>> staticTsiFilenames;
|
||||||
|
private List<Tuple<IPEndPoint, ulong, string>> dynamicTsiFilenames;
|
||||||
|
private List<Tuple<IPEndPoint, ulong, ulong, string>> staticTsiToiFilenames;
|
||||||
|
|
||||||
public void LearnFilename(IPEndPoint endpoint, Atsc3Fdt fdt)
|
public void LearnFilename(IPEndPoint endpoint, Atsc3Fdt fdt)
|
||||||
{
|
{
|
||||||
foreach (Atsc3FdtFile file in fdt.Files)
|
foreach (Atsc3FdtFile file in fdt.Files)
|
||||||
{
|
{
|
||||||
if (staticFilenames == null)
|
if (staticTsiFilenames == null)
|
||||||
staticFilenames = new List<Tuple<IPEndPoint, ulong, string>>();
|
staticTsiFilenames = new List<Tuple<IPEndPoint, ulong, string>>();
|
||||||
staticFilenames.Add(new Tuple<IPEndPoint, ulong, string>(endpoint, file.TOI, file.ContentLocation));
|
staticTsiFilenames.Add(new Tuple<IPEndPoint, ulong, string>(endpoint, file.TOI, file.ContentLocation));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public string GuessFilename(IPEndPoint destination, ulong tsi, ulong toi)
|
public string GuessFilename(IPEndPoint destination, ulong tsi, ulong toi)
|
||||||
{
|
{
|
||||||
if (staticFilenames != null)
|
if (staticTsiToiFilenames != null)
|
||||||
{
|
{
|
||||||
foreach (Tuple<IPEndPoint, ulong, string> staticFilename in staticFilenames)
|
foreach (Tuple<IPEndPoint, ulong, ulong, string> staticFilename in staticTsiToiFilenames)
|
||||||
|
{
|
||||||
|
if (!staticFilename.Item1.Equals(destination))
|
||||||
|
continue;
|
||||||
|
if (staticFilename.Item2 != tsi)
|
||||||
|
continue;
|
||||||
|
if (staticFilename.Item3 != toi)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
return staticFilename.Item4;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dynamicTsiFilenames != null)
|
||||||
|
{
|
||||||
|
foreach (Tuple<IPEndPoint, ulong, string> dynamicFilename in dynamicTsiFilenames)
|
||||||
|
{
|
||||||
|
if (!dynamicFilename.Item1.Equals(destination))
|
||||||
|
continue;
|
||||||
|
if (dynamicFilename.Item2 != tsi)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
string regex = dynamicFilename.Item3;
|
||||||
|
if (regex.Contains("$TOI$"))
|
||||||
|
{
|
||||||
|
regex = regex.Replace("$TOI$", toi.ToString());
|
||||||
|
}
|
||||||
|
if (regex.Contains("$"))
|
||||||
|
throw new NotImplementedException(regex);
|
||||||
|
|
||||||
|
return regex;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (staticTsiFilenames != null)
|
||||||
|
{
|
||||||
|
foreach (Tuple<IPEndPoint, ulong, string> staticFilename in staticTsiFilenames)
|
||||||
{
|
{
|
||||||
if (!staticFilename.Item1.Equals(destination))
|
if (!staticFilename.Item1.Equals(destination))
|
||||||
continue;
|
continue;
|
||||||
@ -37,5 +78,59 @@ namespace skyscraper8.Atsc.A331
|
|||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void LearnFilename(MbmsEnvelope mbmsEnvelope)
|
||||||
|
{
|
||||||
|
LearnFilename(mbmsEnvelope.Atsc3Stsid);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void LearnFilename(STSIDType? stsid)
|
||||||
|
{
|
||||||
|
if (stsid == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
foreach (rSessionType rs in stsid.RS)
|
||||||
|
{
|
||||||
|
IPAddress dIpAddr = IPAddress.Parse(rs.dIpAddr);
|
||||||
|
ushort dPort = rs.dPort;
|
||||||
|
IPEndPoint destination = new IPEndPoint(dIpAddr, dPort);
|
||||||
|
foreach (lSessionType lSessionType in rs.LS)
|
||||||
|
{
|
||||||
|
uint tsi = lSessionType.tsi;
|
||||||
|
if (lSessionType.SrcFlow == null)
|
||||||
|
continue;
|
||||||
|
if (lSessionType.SrcFlow.EFDT == null)
|
||||||
|
continue;
|
||||||
|
LearnFilename(destination, tsi, lSessionType.SrcFlow.EFDT.FDTInstance);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void LearnFilename(IPEndPoint destination, uint tsi, RFC6276FDTInstanceType efdtFdtInstance)
|
||||||
|
{
|
||||||
|
foreach (XmlAttribute xmlAttribute in efdtFdtInstance.AnyAttr)
|
||||||
|
{
|
||||||
|
switch (xmlAttribute.Name)
|
||||||
|
{
|
||||||
|
case "afdt:efdtVersion":
|
||||||
|
continue;
|
||||||
|
case "afdt:fileTemplate":
|
||||||
|
if (dynamicTsiFilenames == null)
|
||||||
|
dynamicTsiFilenames = new List<Tuple<IPEndPoint, ulong, string>>();
|
||||||
|
dynamicTsiFilenames.Add(new Tuple<IPEndPoint, ulong, string>(destination, tsi, xmlAttribute.Value));
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
throw new NotImplementedException(xmlAttribute.Name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (RFC6276FileType rfc6276FileType in efdtFdtInstance.File)
|
||||||
|
{
|
||||||
|
ulong toi = ulong.Parse(rfc6276FileType.TOI);
|
||||||
|
if (staticTsiToiFilenames == null)
|
||||||
|
staticTsiToiFilenames = new List<Tuple<IPEndPoint, ulong, ulong, string>>();
|
||||||
|
staticTsiToiFilenames.Add(new Tuple<IPEndPoint, ulong, ulong, string>(destination, tsi, toi, rfc6276FileType.ContentLocation));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -5,6 +5,7 @@ using System.Linq;
|
|||||||
using System.Net;
|
using System.Net;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
using MimeKit;
|
||||||
using skyscraper5.Ietf.Rfc768;
|
using skyscraper5.Ietf.Rfc768;
|
||||||
using skyscraper5.Ietf.Rfc971;
|
using skyscraper5.Ietf.Rfc971;
|
||||||
using skyscraper5.Skyscraper;
|
using skyscraper5.Skyscraper;
|
||||||
@ -127,17 +128,27 @@ namespace skyscraper8.Atsc.A331
|
|||||||
|
|
||||||
targetListener.PushPacket(lctFrame);
|
targetListener.PushPacket(lctFrame);
|
||||||
_stopProcessIndicator = true;
|
_stopProcessIndicator = true;
|
||||||
if (targetListener.IsComplete())
|
if (lctFrame.CloseObjectFlag)
|
||||||
{
|
{
|
||||||
GuessedFluteDataType guessedFluteDataType = FluteUtilities.GuessDataType(targetListener);
|
if (targetListener.IsComplete())
|
||||||
ProcessMetafile(guessedFluteDataType, targetListener, destination);
|
|
||||||
|
|
||||||
string outFileName = filenames.GuessFilename(destination, tsi, toi);
|
|
||||||
if (!string.IsNullOrEmpty(outFileName))
|
|
||||||
{
|
{
|
||||||
eventHandler.OnAtsc3FileDelivery(destination, tsi, toi, targetListener, guessedFluteDataType, outFileName);
|
GuessedFluteDataType guessedFluteDataType = FluteUtilities.GuessDataType(targetListener);
|
||||||
|
if (guessedFluteDataType == GuessedFluteDataType.Stuffing)
|
||||||
|
return;
|
||||||
|
|
||||||
|
ProcessMetafile(guessedFluteDataType, targetListener, destination);
|
||||||
|
|
||||||
|
string outFileName = filenames.GuessFilename(destination, tsi, toi);
|
||||||
|
if (!string.IsNullOrEmpty(outFileName))
|
||||||
|
{
|
||||||
|
eventHandler.OnAtsc3FileDelivery(destination, tsi, toi, targetListener, guessedFluteDataType, outFileName);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/*if (targetListener.IsComplete())
|
||||||
|
{
|
||||||
|
|
||||||
|
}*/
|
||||||
}
|
}
|
||||||
|
|
||||||
private bool ProcessMetafile(GuessedFluteDataType guessedFluteDataType, FluteListener targetListener, IPEndPoint destination)
|
private bool ProcessMetafile(GuessedFluteDataType guessedFluteDataType, FluteListener targetListener, IPEndPoint destination)
|
||||||
@ -152,11 +163,18 @@ namespace skyscraper8.Atsc.A331
|
|||||||
filenames.LearnFilename(destination, fdt);
|
filenames.LearnFilename(destination, fdt);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
case GuessedFluteDataType.MultimediaContent:
|
case GuessedFluteDataType.MultimediaContent:
|
||||||
return false;
|
return false;
|
||||||
|
case GuessedFluteDataType.Mime:
|
||||||
|
MimeMessage mimeMessage = MimeMessage.Load(targetListener.ToStream());
|
||||||
|
MbmsEnvelope mbmsEnvelope = new MbmsEnvelope(mimeMessage);
|
||||||
|
filenames.LearnFilename(mbmsEnvelope);
|
||||||
|
return true;
|
||||||
|
case GuessedFluteDataType.Stuffing:
|
||||||
|
return false;
|
||||||
default:
|
default:
|
||||||
|
targetListener.WriteToFile("unknown.bin");
|
||||||
throw new NotImplementedException(guessedFluteDataType.ToString());
|
throw new NotImplementedException(guessedFluteDataType.ToString());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -6,6 +6,7 @@ using System.Text;
|
|||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using System.Xml;
|
using System.Xml;
|
||||||
using System.Xml.Serialization;
|
using System.Xml.Serialization;
|
||||||
|
using Schemas;
|
||||||
|
|
||||||
namespace skyscraper8.Atsc.A331
|
namespace skyscraper8.Atsc.A331
|
||||||
{
|
{
|
||||||
@ -13,6 +14,10 @@ namespace skyscraper8.Atsc.A331
|
|||||||
{
|
{
|
||||||
private static XmlSerializer sltSerializer;
|
private static XmlSerializer sltSerializer;
|
||||||
private static XmlSerializer systimeSerializer;
|
private static XmlSerializer systimeSerializer;
|
||||||
|
private static XmlSerializer htmlEntryPackageSerializer;
|
||||||
|
private static XmlSerializer stsIdSerializer;
|
||||||
|
private static XmlSerializer routeUsdSerializer;
|
||||||
|
|
||||||
|
|
||||||
public static sltType UnpackSlt(byte[] buffer)
|
public static sltType UnpackSlt(byte[] buffer)
|
||||||
{
|
{
|
||||||
@ -126,5 +131,36 @@ namespace skyscraper8.Atsc.A331
|
|||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static HELDType? ParseHeld(Stream value)
|
||||||
|
{
|
||||||
|
if (htmlEntryPackageSerializer == null)
|
||||||
|
{
|
||||||
|
htmlEntryPackageSerializer = new XmlSerializer(typeof(HELDType));
|
||||||
|
}
|
||||||
|
object deserialize = htmlEntryPackageSerializer.Deserialize(value);
|
||||||
|
return deserialize as HELDType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static STSIDType? ParseStsId(Stream value)
|
||||||
|
{
|
||||||
|
if (stsIdSerializer == null)
|
||||||
|
{
|
||||||
|
stsIdSerializer = new XmlSerializer(typeof(STSIDType));
|
||||||
|
}
|
||||||
|
object deserialize = stsIdSerializer.Deserialize(value);
|
||||||
|
return deserialize as STSIDType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static BundleDescriptionROUTEType? ParseRouteUsd(Stream value)
|
||||||
|
{
|
||||||
|
if (routeUsdSerializer == null)
|
||||||
|
{
|
||||||
|
routeUsdSerializer = new XmlSerializer(typeof(BundleDescriptionROUTEType));
|
||||||
|
}
|
||||||
|
object deserialize = routeUsdSerializer.Deserialize(value);
|
||||||
|
return deserialize as BundleDescriptionROUTEType;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -0,0 +1,295 @@
|
|||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// <auto-generated>
|
||||||
|
// This code was generated by a tool.
|
||||||
|
// Runtime Version:4.0.30319.42000
|
||||||
|
//
|
||||||
|
// Changes to this file may cause incorrect behavior and will be lost if
|
||||||
|
// the code is regenerated.
|
||||||
|
// </auto-generated>
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
//
|
||||||
|
//This source code was auto-generated by MonoXSD
|
||||||
|
//
|
||||||
|
namespace skyscraper8.Atsc.A331.Schema {
|
||||||
|
|
||||||
|
/// <remarks/>
|
||||||
|
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "0.0.0.0")]
|
||||||
|
[System.SerializableAttribute()]
|
||||||
|
[System.Diagnostics.DebuggerStepThroughAttribute()]
|
||||||
|
[System.ComponentModel.DesignerCategoryAttribute("code")]
|
||||||
|
[System.Xml.Serialization.XmlTypeAttribute(Namespace="tag:atsc.org,2016:XMLSchemas/ATSC3/AppSignaling/HELD/1.0/")]
|
||||||
|
public partial class HTMLEntryPackageType {
|
||||||
|
|
||||||
|
private System.Xml.XmlElement[] anyField;
|
||||||
|
|
||||||
|
private string appContextIdField;
|
||||||
|
|
||||||
|
private string requiredCapabilitiesField;
|
||||||
|
|
||||||
|
private bool appRenderingField;
|
||||||
|
|
||||||
|
private bool appRenderingFieldSpecified;
|
||||||
|
|
||||||
|
private System.DateTime clearAppContextCacheDateField;
|
||||||
|
|
||||||
|
private bool clearAppContextCacheDateFieldSpecified;
|
||||||
|
|
||||||
|
private string bcastEntryPackageUrlField;
|
||||||
|
|
||||||
|
private string bcastEntryPageUrlField;
|
||||||
|
|
||||||
|
private string bbandEntryPageUrlField;
|
||||||
|
|
||||||
|
private System.DateTime validFromField;
|
||||||
|
|
||||||
|
private bool validFromFieldSpecified;
|
||||||
|
|
||||||
|
private System.DateTime validUntilField;
|
||||||
|
|
||||||
|
private bool validUntilFieldSpecified;
|
||||||
|
|
||||||
|
private ushort[] coupledServicesField;
|
||||||
|
|
||||||
|
private uint[] lctTSIRefField;
|
||||||
|
|
||||||
|
private System.Xml.XmlAttribute[] anyAttrField;
|
||||||
|
|
||||||
|
/// <remarks/>
|
||||||
|
[System.Xml.Serialization.XmlAnyElementAttribute()]
|
||||||
|
public System.Xml.XmlElement[] Any {
|
||||||
|
get {
|
||||||
|
return this.anyField;
|
||||||
|
}
|
||||||
|
set {
|
||||||
|
this.anyField = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <remarks/>
|
||||||
|
[System.Xml.Serialization.XmlAttributeAttribute(DataType="anyURI")]
|
||||||
|
public string appContextId {
|
||||||
|
get {
|
||||||
|
return this.appContextIdField;
|
||||||
|
}
|
||||||
|
set {
|
||||||
|
this.appContextIdField = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <remarks/>
|
||||||
|
[System.Xml.Serialization.XmlAttributeAttribute()]
|
||||||
|
public string requiredCapabilities {
|
||||||
|
get {
|
||||||
|
return this.requiredCapabilitiesField;
|
||||||
|
}
|
||||||
|
set {
|
||||||
|
this.requiredCapabilitiesField = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <remarks/>
|
||||||
|
[System.Xml.Serialization.XmlAttributeAttribute()]
|
||||||
|
public bool appRendering {
|
||||||
|
get {
|
||||||
|
return this.appRenderingField;
|
||||||
|
}
|
||||||
|
set {
|
||||||
|
this.appRenderingField = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <remarks/>
|
||||||
|
[System.Xml.Serialization.XmlIgnoreAttribute()]
|
||||||
|
public bool appRenderingSpecified {
|
||||||
|
get {
|
||||||
|
return this.appRenderingFieldSpecified;
|
||||||
|
}
|
||||||
|
set {
|
||||||
|
this.appRenderingFieldSpecified = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <remarks/>
|
||||||
|
[System.Xml.Serialization.XmlAttributeAttribute()]
|
||||||
|
public System.DateTime clearAppContextCacheDate {
|
||||||
|
get {
|
||||||
|
return this.clearAppContextCacheDateField;
|
||||||
|
}
|
||||||
|
set {
|
||||||
|
this.clearAppContextCacheDateField = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <remarks/>
|
||||||
|
[System.Xml.Serialization.XmlIgnoreAttribute()]
|
||||||
|
public bool clearAppContextCacheDateSpecified {
|
||||||
|
get {
|
||||||
|
return this.clearAppContextCacheDateFieldSpecified;
|
||||||
|
}
|
||||||
|
set {
|
||||||
|
this.clearAppContextCacheDateFieldSpecified = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <remarks/>
|
||||||
|
[System.Xml.Serialization.XmlAttributeAttribute(DataType="anyURI")]
|
||||||
|
public string bcastEntryPackageUrl {
|
||||||
|
get {
|
||||||
|
return this.bcastEntryPackageUrlField;
|
||||||
|
}
|
||||||
|
set {
|
||||||
|
this.bcastEntryPackageUrlField = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <remarks/>
|
||||||
|
[System.Xml.Serialization.XmlAttributeAttribute(DataType="anyURI")]
|
||||||
|
public string bcastEntryPageUrl {
|
||||||
|
get {
|
||||||
|
return this.bcastEntryPageUrlField;
|
||||||
|
}
|
||||||
|
set {
|
||||||
|
this.bcastEntryPageUrlField = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <remarks/>
|
||||||
|
[System.Xml.Serialization.XmlAttributeAttribute(DataType="anyURI")]
|
||||||
|
public string bbandEntryPageUrl {
|
||||||
|
get {
|
||||||
|
return this.bbandEntryPageUrlField;
|
||||||
|
}
|
||||||
|
set {
|
||||||
|
this.bbandEntryPageUrlField = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <remarks/>
|
||||||
|
[System.Xml.Serialization.XmlAttributeAttribute()]
|
||||||
|
public System.DateTime validFrom {
|
||||||
|
get {
|
||||||
|
return this.validFromField;
|
||||||
|
}
|
||||||
|
set {
|
||||||
|
this.validFromField = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <remarks/>
|
||||||
|
[System.Xml.Serialization.XmlIgnoreAttribute()]
|
||||||
|
public bool validFromSpecified {
|
||||||
|
get {
|
||||||
|
return this.validFromFieldSpecified;
|
||||||
|
}
|
||||||
|
set {
|
||||||
|
this.validFromFieldSpecified = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <remarks/>
|
||||||
|
[System.Xml.Serialization.XmlAttributeAttribute()]
|
||||||
|
public System.DateTime validUntil {
|
||||||
|
get {
|
||||||
|
return this.validUntilField;
|
||||||
|
}
|
||||||
|
set {
|
||||||
|
this.validUntilField = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <remarks/>
|
||||||
|
[System.Xml.Serialization.XmlIgnoreAttribute()]
|
||||||
|
public bool validUntilSpecified {
|
||||||
|
get {
|
||||||
|
return this.validUntilFieldSpecified;
|
||||||
|
}
|
||||||
|
set {
|
||||||
|
this.validUntilFieldSpecified = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <remarks/>
|
||||||
|
[System.Xml.Serialization.XmlAttributeAttribute()]
|
||||||
|
public ushort[] coupledServices {
|
||||||
|
get {
|
||||||
|
return this.coupledServicesField;
|
||||||
|
}
|
||||||
|
set {
|
||||||
|
this.coupledServicesField = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <remarks/>
|
||||||
|
[System.Xml.Serialization.XmlAttributeAttribute()]
|
||||||
|
public uint[] lctTSIRef {
|
||||||
|
get {
|
||||||
|
return this.lctTSIRefField;
|
||||||
|
}
|
||||||
|
set {
|
||||||
|
this.lctTSIRefField = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <remarks/>
|
||||||
|
[System.Xml.Serialization.XmlAnyAttributeAttribute()]
|
||||||
|
public System.Xml.XmlAttribute[] AnyAttr {
|
||||||
|
get {
|
||||||
|
return this.anyAttrField;
|
||||||
|
}
|
||||||
|
set {
|
||||||
|
this.anyAttrField = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <remarks/>
|
||||||
|
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "0.0.0.0")]
|
||||||
|
[System.SerializableAttribute()]
|
||||||
|
[System.Diagnostics.DebuggerStepThroughAttribute()]
|
||||||
|
[System.ComponentModel.DesignerCategoryAttribute("code")]
|
||||||
|
[System.Xml.Serialization.XmlTypeAttribute(Namespace="tag:atsc.org,2016:XMLSchemas/ATSC3/AppSignaling/HELD/1.0/")]
|
||||||
|
[System.Xml.Serialization.XmlRootAttribute("HELD", Namespace="tag:atsc.org,2016:XMLSchemas/ATSC3/AppSignaling/HELD/1.0/", IsNullable=false)]
|
||||||
|
public partial class HELDType {
|
||||||
|
|
||||||
|
private HTMLEntryPackageType[] hTMLEntryPackageField;
|
||||||
|
|
||||||
|
private System.Xml.XmlElement[] anyField;
|
||||||
|
|
||||||
|
private System.Xml.XmlAttribute[] anyAttrField;
|
||||||
|
|
||||||
|
/// <remarks/>
|
||||||
|
[System.Xml.Serialization.XmlElementAttribute("HTMLEntryPackage")]
|
||||||
|
public HTMLEntryPackageType[] HTMLEntryPackage {
|
||||||
|
get {
|
||||||
|
return this.hTMLEntryPackageField;
|
||||||
|
}
|
||||||
|
set {
|
||||||
|
this.hTMLEntryPackageField = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <remarks/>
|
||||||
|
[System.Xml.Serialization.XmlAnyElementAttribute()]
|
||||||
|
public System.Xml.XmlElement[] Any {
|
||||||
|
get {
|
||||||
|
return this.anyField;
|
||||||
|
}
|
||||||
|
set {
|
||||||
|
this.anyField = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <remarks/>
|
||||||
|
[System.Xml.Serialization.XmlAnyAttributeAttribute()]
|
||||||
|
public System.Xml.XmlAttribute[] AnyAttr {
|
||||||
|
get {
|
||||||
|
return this.anyAttrField;
|
||||||
|
}
|
||||||
|
set {
|
||||||
|
this.anyAttrField = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
348
skyscraper8/Atsc/A331/Schema/ROUTEUSD-1.0-20170920.cs
Normal file
348
skyscraper8/Atsc/A331/Schema/ROUTEUSD-1.0-20170920.cs
Normal file
@ -0,0 +1,348 @@
|
|||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// <auto-generated>
|
||||||
|
// This code was generated by a tool.
|
||||||
|
// Runtime Version:4.0.30319.42000
|
||||||
|
//
|
||||||
|
// Changes to this file may cause incorrect behavior and will be lost if
|
||||||
|
// the code is regenerated.
|
||||||
|
// </auto-generated>
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
//
|
||||||
|
//This source code was auto-generated by MonoXSD
|
||||||
|
//
|
||||||
|
namespace Schemas {
|
||||||
|
|
||||||
|
|
||||||
|
/// <remarks/>
|
||||||
|
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "0.0.0.0")]
|
||||||
|
[System.SerializableAttribute()]
|
||||||
|
[System.Diagnostics.DebuggerStepThroughAttribute()]
|
||||||
|
[System.ComponentModel.DesignerCategoryAttribute("code")]
|
||||||
|
[System.Xml.Serialization.XmlTypeAttribute(Namespace="tag:atsc.org,2016:XMLSchemas/ATSC3/Delivery/ROUTEUSD/1.0/")]
|
||||||
|
[System.Xml.Serialization.XmlRootAttribute("BundleDescriptionROUTE", Namespace="tag:atsc.org,2016:XMLSchemas/ATSC3/Delivery/ROUTEUSD/1.0/", IsNullable=false)]
|
||||||
|
public partial class BundleDescriptionROUTEType {
|
||||||
|
|
||||||
|
private UserServiceDescriptionType userServiceDescriptionField;
|
||||||
|
|
||||||
|
private System.Xml.XmlElement[] anyField;
|
||||||
|
|
||||||
|
/// <remarks/>
|
||||||
|
public UserServiceDescriptionType UserServiceDescription {
|
||||||
|
get {
|
||||||
|
return this.userServiceDescriptionField;
|
||||||
|
}
|
||||||
|
set {
|
||||||
|
this.userServiceDescriptionField = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <remarks/>
|
||||||
|
[System.Xml.Serialization.XmlAnyElementAttribute()]
|
||||||
|
public System.Xml.XmlElement[] Any {
|
||||||
|
get {
|
||||||
|
return this.anyField;
|
||||||
|
}
|
||||||
|
set {
|
||||||
|
this.anyField = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <remarks/>
|
||||||
|
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "0.0.0.0")]
|
||||||
|
[System.SerializableAttribute()]
|
||||||
|
[System.Diagnostics.DebuggerStepThroughAttribute()]
|
||||||
|
[System.ComponentModel.DesignerCategoryAttribute("code")]
|
||||||
|
[System.Xml.Serialization.XmlTypeAttribute(Namespace="tag:atsc.org,2016:XMLSchemas/ATSC3/Delivery/ROUTEUSD/1.0/")]
|
||||||
|
public partial class UserServiceDescriptionType {
|
||||||
|
|
||||||
|
private NameType[] nameField;
|
||||||
|
|
||||||
|
private ServiceLangType[] serviceLanguageField;
|
||||||
|
|
||||||
|
private DeliveryMethodType[] deliveryMethodField;
|
||||||
|
|
||||||
|
private System.Xml.XmlElement[] anyField;
|
||||||
|
|
||||||
|
private ushort serviceIdField;
|
||||||
|
|
||||||
|
private bool serviceStatusField;
|
||||||
|
|
||||||
|
private System.Xml.XmlAttribute[] anyAttrField;
|
||||||
|
|
||||||
|
public UserServiceDescriptionType() {
|
||||||
|
this.serviceStatusField = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <remarks/>
|
||||||
|
[System.Xml.Serialization.XmlElementAttribute("Name")]
|
||||||
|
public NameType[] Name {
|
||||||
|
get {
|
||||||
|
return this.nameField;
|
||||||
|
}
|
||||||
|
set {
|
||||||
|
this.nameField = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <remarks/>
|
||||||
|
[System.Xml.Serialization.XmlElementAttribute("ServiceLanguage")]
|
||||||
|
public ServiceLangType[] ServiceLanguage {
|
||||||
|
get {
|
||||||
|
return this.serviceLanguageField;
|
||||||
|
}
|
||||||
|
set {
|
||||||
|
this.serviceLanguageField = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <remarks/>
|
||||||
|
[System.Xml.Serialization.XmlElementAttribute("DeliveryMethod")]
|
||||||
|
public DeliveryMethodType[] DeliveryMethod {
|
||||||
|
get {
|
||||||
|
return this.deliveryMethodField;
|
||||||
|
}
|
||||||
|
set {
|
||||||
|
this.deliveryMethodField = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <remarks/>
|
||||||
|
[System.Xml.Serialization.XmlAnyElementAttribute()]
|
||||||
|
public System.Xml.XmlElement[] Any {
|
||||||
|
get {
|
||||||
|
return this.anyField;
|
||||||
|
}
|
||||||
|
set {
|
||||||
|
this.anyField = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <remarks/>
|
||||||
|
[System.Xml.Serialization.XmlAttributeAttribute()]
|
||||||
|
public ushort serviceId {
|
||||||
|
get {
|
||||||
|
return this.serviceIdField;
|
||||||
|
}
|
||||||
|
set {
|
||||||
|
this.serviceIdField = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <remarks/>
|
||||||
|
[System.Xml.Serialization.XmlAttributeAttribute()]
|
||||||
|
[System.ComponentModel.DefaultValueAttribute(true)]
|
||||||
|
public bool serviceStatus {
|
||||||
|
get {
|
||||||
|
return this.serviceStatusField;
|
||||||
|
}
|
||||||
|
set {
|
||||||
|
this.serviceStatusField = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <remarks/>
|
||||||
|
[System.Xml.Serialization.XmlAnyAttributeAttribute()]
|
||||||
|
public System.Xml.XmlAttribute[] AnyAttr {
|
||||||
|
get {
|
||||||
|
return this.anyAttrField;
|
||||||
|
}
|
||||||
|
set {
|
||||||
|
this.anyAttrField = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <remarks/>
|
||||||
|
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "0.0.0.0")]
|
||||||
|
[System.SerializableAttribute()]
|
||||||
|
[System.Diagnostics.DebuggerStepThroughAttribute()]
|
||||||
|
[System.ComponentModel.DesignerCategoryAttribute("code")]
|
||||||
|
[System.Xml.Serialization.XmlTypeAttribute(Namespace="tag:atsc.org,2016:XMLSchemas/ATSC3/Delivery/ROUTEUSD/1.0/")]
|
||||||
|
public partial class NameType {
|
||||||
|
|
||||||
|
private string langField;
|
||||||
|
|
||||||
|
private System.Xml.XmlAttribute[] anyAttrField;
|
||||||
|
|
||||||
|
private string valueField;
|
||||||
|
|
||||||
|
/// <remarks/>
|
||||||
|
[System.Xml.Serialization.XmlAttributeAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified, Namespace="http://www.w3.org/XML/1998/namespace")]
|
||||||
|
public string lang {
|
||||||
|
get {
|
||||||
|
return this.langField;
|
||||||
|
}
|
||||||
|
set {
|
||||||
|
this.langField = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <remarks/>
|
||||||
|
[System.Xml.Serialization.XmlAnyAttributeAttribute()]
|
||||||
|
public System.Xml.XmlAttribute[] AnyAttr {
|
||||||
|
get {
|
||||||
|
return this.anyAttrField;
|
||||||
|
}
|
||||||
|
set {
|
||||||
|
this.anyAttrField = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <remarks/>
|
||||||
|
[System.Xml.Serialization.XmlTextAttribute()]
|
||||||
|
public string Value {
|
||||||
|
get {
|
||||||
|
return this.valueField;
|
||||||
|
}
|
||||||
|
set {
|
||||||
|
this.valueField = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <remarks/>
|
||||||
|
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "0.0.0.0")]
|
||||||
|
[System.SerializableAttribute()]
|
||||||
|
[System.Diagnostics.DebuggerStepThroughAttribute()]
|
||||||
|
[System.ComponentModel.DesignerCategoryAttribute("code")]
|
||||||
|
[System.Xml.Serialization.XmlTypeAttribute(Namespace="tag:atsc.org,2016:XMLSchemas/ATSC3/Delivery/ROUTEUSD/1.0/")]
|
||||||
|
public partial class AppServiceType {
|
||||||
|
|
||||||
|
private string[] basePatternField;
|
||||||
|
|
||||||
|
private System.Xml.XmlElement[] anyField;
|
||||||
|
|
||||||
|
private System.Xml.XmlAttribute[] anyAttrField;
|
||||||
|
|
||||||
|
/// <remarks/>
|
||||||
|
[System.Xml.Serialization.XmlElementAttribute("BasePattern")]
|
||||||
|
public string[] BasePattern {
|
||||||
|
get {
|
||||||
|
return this.basePatternField;
|
||||||
|
}
|
||||||
|
set {
|
||||||
|
this.basePatternField = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <remarks/>
|
||||||
|
[System.Xml.Serialization.XmlAnyElementAttribute()]
|
||||||
|
public System.Xml.XmlElement[] Any {
|
||||||
|
get {
|
||||||
|
return this.anyField;
|
||||||
|
}
|
||||||
|
set {
|
||||||
|
this.anyField = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <remarks/>
|
||||||
|
[System.Xml.Serialization.XmlAnyAttributeAttribute()]
|
||||||
|
public System.Xml.XmlAttribute[] AnyAttr {
|
||||||
|
get {
|
||||||
|
return this.anyAttrField;
|
||||||
|
}
|
||||||
|
set {
|
||||||
|
this.anyAttrField = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <remarks/>
|
||||||
|
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "0.0.0.0")]
|
||||||
|
[System.SerializableAttribute()]
|
||||||
|
[System.Diagnostics.DebuggerStepThroughAttribute()]
|
||||||
|
[System.ComponentModel.DesignerCategoryAttribute("code")]
|
||||||
|
[System.Xml.Serialization.XmlTypeAttribute(Namespace="tag:atsc.org,2016:XMLSchemas/ATSC3/Delivery/ROUTEUSD/1.0/")]
|
||||||
|
public partial class DeliveryMethodType {
|
||||||
|
|
||||||
|
private AppServiceType[] broadcastAppServiceField;
|
||||||
|
|
||||||
|
private AppServiceType[] unicastAppServiceField;
|
||||||
|
|
||||||
|
private System.Xml.XmlElement[] anyField;
|
||||||
|
|
||||||
|
private System.Xml.XmlAttribute[] anyAttrField;
|
||||||
|
|
||||||
|
/// <remarks/>
|
||||||
|
[System.Xml.Serialization.XmlElementAttribute("BroadcastAppService")]
|
||||||
|
public AppServiceType[] BroadcastAppService {
|
||||||
|
get {
|
||||||
|
return this.broadcastAppServiceField;
|
||||||
|
}
|
||||||
|
set {
|
||||||
|
this.broadcastAppServiceField = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <remarks/>
|
||||||
|
[System.Xml.Serialization.XmlElementAttribute("UnicastAppService")]
|
||||||
|
public AppServiceType[] UnicastAppService {
|
||||||
|
get {
|
||||||
|
return this.unicastAppServiceField;
|
||||||
|
}
|
||||||
|
set {
|
||||||
|
this.unicastAppServiceField = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <remarks/>
|
||||||
|
[System.Xml.Serialization.XmlAnyElementAttribute()]
|
||||||
|
public System.Xml.XmlElement[] Any {
|
||||||
|
get {
|
||||||
|
return this.anyField;
|
||||||
|
}
|
||||||
|
set {
|
||||||
|
this.anyField = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <remarks/>
|
||||||
|
[System.Xml.Serialization.XmlAnyAttributeAttribute()]
|
||||||
|
public System.Xml.XmlAttribute[] AnyAttr {
|
||||||
|
get {
|
||||||
|
return this.anyAttrField;
|
||||||
|
}
|
||||||
|
set {
|
||||||
|
this.anyAttrField = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <remarks/>
|
||||||
|
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "0.0.0.0")]
|
||||||
|
[System.SerializableAttribute()]
|
||||||
|
[System.Diagnostics.DebuggerStepThroughAttribute()]
|
||||||
|
[System.ComponentModel.DesignerCategoryAttribute("code")]
|
||||||
|
[System.Xml.Serialization.XmlTypeAttribute(Namespace="tag:atsc.org,2016:XMLSchemas/ATSC3/Delivery/ROUTEUSD/1.0/")]
|
||||||
|
public partial class ServiceLangType {
|
||||||
|
|
||||||
|
private System.Xml.XmlAttribute[] anyAttrField;
|
||||||
|
|
||||||
|
private string valueField;
|
||||||
|
|
||||||
|
/// <remarks/>
|
||||||
|
[System.Xml.Serialization.XmlAnyAttributeAttribute()]
|
||||||
|
public System.Xml.XmlAttribute[] AnyAttr {
|
||||||
|
get {
|
||||||
|
return this.anyAttrField;
|
||||||
|
}
|
||||||
|
set {
|
||||||
|
this.anyAttrField = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <remarks/>
|
||||||
|
[System.Xml.Serialization.XmlTextAttribute()]
|
||||||
|
public string Value {
|
||||||
|
get {
|
||||||
|
return this.valueField;
|
||||||
|
}
|
||||||
|
set {
|
||||||
|
this.valueField = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
1713
skyscraper8/Atsc/A331/Schema/S-TSID-1.0-20190208_FDT.cs
Normal file
1713
skyscraper8/Atsc/A331/Schema/S-TSID-1.0-20190208_FDT.cs
Normal file
File diff suppressed because it is too large
Load Diff
@ -85,8 +85,24 @@ namespace skyscraper8.Ietf.FLUTE
|
|||||||
byte[] firstBlock = targetListener.GetFirstBlock();
|
byte[] firstBlock = targetListener.GetFirstBlock();
|
||||||
if (firstBlock[0] == 0x3c && firstBlock[1] == 0x3f && firstBlock[2] == 0x78 && firstBlock[3] == 0x6d && firstBlock[4] == 0x6c)
|
if (firstBlock[0] == 0x3c && firstBlock[1] == 0x3f && firstBlock[2] == 0x78 && firstBlock[3] == 0x6d && firstBlock[4] == 0x6c)
|
||||||
return GuessedFluteDataType.Xml;
|
return GuessedFluteDataType.Xml;
|
||||||
if (firstBlock[0] == 0x00 && firstBlock[1] == 0x00 && firstBlock[2] == 0x00)
|
if (firstBlock[0] == 0x00 && firstBlock[1] == 0x00 && firstBlock[2] == 0x00 && firstBlock[3] != 0x00)
|
||||||
return GuessedFluteDataType.MultimediaContent;
|
return GuessedFluteDataType.MultimediaContent;
|
||||||
|
if (firstBlock[0] == 'C' && firstBlock[1] == 'o' && firstBlock[2] == 'n' && firstBlock[3] == 't' &&
|
||||||
|
firstBlock[4] == 'e' && firstBlock[5] == 'n' && firstBlock[6] == 't' && firstBlock[7] == '-' &&
|
||||||
|
firstBlock[8] == 'T' && firstBlock[9] == 'y' && firstBlock[10] == 'p' && firstBlock[11] == 'e' &&
|
||||||
|
firstBlock[12] == ':' && firstBlock[13] == ' ')
|
||||||
|
return GuessedFluteDataType.Mime;
|
||||||
|
|
||||||
|
bool allZeroes = true;
|
||||||
|
for (int i = 0; i < Math.Min(firstBlock.Length, 1000); i++)
|
||||||
|
{
|
||||||
|
if (firstBlock[i] != 0)
|
||||||
|
allZeroes = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (allZeroes)
|
||||||
|
return GuessedFluteDataType.Stuffing;
|
||||||
|
|
||||||
return GuessedFluteDataType.Unknown;
|
return GuessedFluteDataType.Unknown;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -95,6 +111,8 @@ namespace skyscraper8.Ietf.FLUTE
|
|||||||
{
|
{
|
||||||
Unknown,
|
Unknown,
|
||||||
Xml,
|
Xml,
|
||||||
MultimediaContent
|
MultimediaContent,
|
||||||
|
Mime,
|
||||||
|
Stuffing
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
51
skyscraper8/MpegDash/MbmsEnvelope.cs
Normal file
51
skyscraper8/MpegDash/MbmsEnvelope.cs
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
using MimeKit;
|
||||||
|
using Schemas;
|
||||||
|
using skyscraper8.Atsc.A331.Schema;
|
||||||
|
using skyscraper8.MpegDash.Schema;
|
||||||
|
|
||||||
|
namespace skyscraper8.Atsc.A331;
|
||||||
|
|
||||||
|
public class MbmsEnvelope
|
||||||
|
{
|
||||||
|
public MbmsEnvelope(MimeMessage mimeMessage)
|
||||||
|
{
|
||||||
|
foreach (MimePart part in mimeMessage.BodyParts)
|
||||||
|
{
|
||||||
|
if (part.Content == null)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
string key = part.ContentType.MimeType.ToLowerInvariant();
|
||||||
|
Stream value = part.Content.Open();
|
||||||
|
|
||||||
|
switch (key)
|
||||||
|
{
|
||||||
|
case "application/mbms-envelope+xml":
|
||||||
|
MetadataEnvelope = MpegDashUtilities.ParseMetadataEnvelope(value);
|
||||||
|
break;
|
||||||
|
case "application/dash+xml":
|
||||||
|
MediaPresentationDescription = MpegDashUtilities.ParseMPD(value);
|
||||||
|
break;
|
||||||
|
case "application/atsc-held+xml":
|
||||||
|
Atsc3Held = Atsc3Utilities.ParseHeld(value);
|
||||||
|
break;
|
||||||
|
case "application/route-s-tsid+xml":
|
||||||
|
Atsc3Stsid = Atsc3Utilities.ParseStsId(value);
|
||||||
|
break;
|
||||||
|
case "application/route-usd+xml":
|
||||||
|
Atsc3RouteUsd = Atsc3Utilities.ParseRouteUsd(value);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
throw new NotImplementedException(key);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public BundleDescriptionROUTEType? Atsc3RouteUsd { get; private set; }
|
||||||
|
public STSIDType? Atsc3Stsid { get; private set; }
|
||||||
|
|
||||||
|
public HELDType Atsc3Held { get; private set; }
|
||||||
|
|
||||||
|
public MPDtype MediaPresentationDescription { get; private set; }
|
||||||
|
|
||||||
|
public metadataEnvelopeType MetadataEnvelope {get; private set;}
|
||||||
|
}
|
||||||
30
skyscraper8/MpegDash/MpegDashUtilities.cs
Normal file
30
skyscraper8/MpegDash/MpegDashUtilities.cs
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
using System.Xml.Serialization;
|
||||||
|
using skyscraper8.MpegDash.Schema;
|
||||||
|
|
||||||
|
namespace skyscraper8.Atsc.A331;
|
||||||
|
|
||||||
|
public static class MpegDashUtilities
|
||||||
|
{
|
||||||
|
private static XmlSerializer metadataEnvelopeSerializer;
|
||||||
|
private static XmlSerializer mpdSerializer;
|
||||||
|
|
||||||
|
public static metadataEnvelopeType? ParseMetadataEnvelope(Stream value)
|
||||||
|
{
|
||||||
|
if (metadataEnvelopeSerializer == null)
|
||||||
|
{
|
||||||
|
metadataEnvelopeSerializer = new XmlSerializer(typeof(metadataEnvelopeType));
|
||||||
|
}
|
||||||
|
object deserialize = metadataEnvelopeSerializer.Deserialize(value);
|
||||||
|
return deserialize as metadataEnvelopeType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static MPDtype ParseMPD(Stream value)
|
||||||
|
{
|
||||||
|
if (mpdSerializer == null)
|
||||||
|
{
|
||||||
|
mpdSerializer = new XmlSerializer(typeof(MPDtype));
|
||||||
|
}
|
||||||
|
object deserialize = mpdSerializer.Deserialize(value);
|
||||||
|
return (MPDtype)deserialize;
|
||||||
|
}
|
||||||
|
}
|
||||||
3831
skyscraper8/MpegDash/Schema/DASH-MPD_xlink.cs
Normal file
3831
skyscraper8/MpegDash/Schema/DASH-MPD_xlink.cs
Normal file
File diff suppressed because it is too large
Load Diff
177
skyscraper8/MpegDash/Schema/envelope.cs
Normal file
177
skyscraper8/MpegDash/Schema/envelope.cs
Normal file
@ -0,0 +1,177 @@
|
|||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// <auto-generated>
|
||||||
|
// This code was generated by a tool.
|
||||||
|
// Runtime Version:4.0.30319.42000
|
||||||
|
//
|
||||||
|
// Changes to this file may cause incorrect behavior and will be lost if
|
||||||
|
// the code is regenerated.
|
||||||
|
// </auto-generated>
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
//
|
||||||
|
//This source code was auto-generated by MonoXSD
|
||||||
|
//
|
||||||
|
namespace skyscraper8.MpegDash.Schema {
|
||||||
|
|
||||||
|
|
||||||
|
/// <remarks/>
|
||||||
|
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "0.0.0.0")]
|
||||||
|
[System.SerializableAttribute()]
|
||||||
|
[System.Diagnostics.DebuggerStepThroughAttribute()]
|
||||||
|
[System.ComponentModel.DesignerCategoryAttribute("code")]
|
||||||
|
[System.Xml.Serialization.XmlTypeAttribute(Namespace="urn:3gpp:metadata:2005:MBMS:envelope")]
|
||||||
|
[System.Xml.Serialization.XmlRootAttribute("metadataEnvelope", Namespace="urn:3gpp:metadata:2005:MBMS:envelope", IsNullable=false)]
|
||||||
|
public partial class metadataEnvelopeType {
|
||||||
|
|
||||||
|
private metadataEnvelopeItemType[] itemField;
|
||||||
|
|
||||||
|
/// <remarks/>
|
||||||
|
[System.Xml.Serialization.XmlElementAttribute("item")]
|
||||||
|
public metadataEnvelopeItemType[] item {
|
||||||
|
get {
|
||||||
|
return this.itemField;
|
||||||
|
}
|
||||||
|
set {
|
||||||
|
this.itemField = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <remarks/>
|
||||||
|
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "0.0.0.0")]
|
||||||
|
[System.SerializableAttribute()]
|
||||||
|
[System.Diagnostics.DebuggerStepThroughAttribute()]
|
||||||
|
[System.ComponentModel.DesignerCategoryAttribute("code")]
|
||||||
|
[System.Xml.Serialization.XmlTypeAttribute(Namespace="urn:3gpp:metadata:2005:MBMS:envelope")]
|
||||||
|
public partial class metadataEnvelopeItemType {
|
||||||
|
|
||||||
|
private string metadataFragmentField;
|
||||||
|
|
||||||
|
private System.Xml.XmlElement[] anyField;
|
||||||
|
|
||||||
|
private string metadataURIField;
|
||||||
|
|
||||||
|
private string versionField;
|
||||||
|
|
||||||
|
private System.DateTime validFromField;
|
||||||
|
|
||||||
|
private bool validFromFieldSpecified;
|
||||||
|
|
||||||
|
private System.DateTime validUntilField;
|
||||||
|
|
||||||
|
private bool validUntilFieldSpecified;
|
||||||
|
|
||||||
|
private string contentTypeField;
|
||||||
|
|
||||||
|
private System.Xml.XmlAttribute[] anyAttrField;
|
||||||
|
|
||||||
|
/// <remarks/>
|
||||||
|
public string metadataFragment {
|
||||||
|
get {
|
||||||
|
return this.metadataFragmentField;
|
||||||
|
}
|
||||||
|
set {
|
||||||
|
this.metadataFragmentField = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <remarks/>
|
||||||
|
[System.Xml.Serialization.XmlAnyElementAttribute()]
|
||||||
|
public System.Xml.XmlElement[] Any {
|
||||||
|
get {
|
||||||
|
return this.anyField;
|
||||||
|
}
|
||||||
|
set {
|
||||||
|
this.anyField = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <remarks/>
|
||||||
|
[System.Xml.Serialization.XmlAttributeAttribute(DataType="anyURI")]
|
||||||
|
public string metadataURI {
|
||||||
|
get {
|
||||||
|
return this.metadataURIField;
|
||||||
|
}
|
||||||
|
set {
|
||||||
|
this.metadataURIField = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <remarks/>
|
||||||
|
[System.Xml.Serialization.XmlAttributeAttribute(DataType="positiveInteger")]
|
||||||
|
public string version {
|
||||||
|
get {
|
||||||
|
return this.versionField;
|
||||||
|
}
|
||||||
|
set {
|
||||||
|
this.versionField = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <remarks/>
|
||||||
|
[System.Xml.Serialization.XmlAttributeAttribute()]
|
||||||
|
public System.DateTime validFrom {
|
||||||
|
get {
|
||||||
|
return this.validFromField;
|
||||||
|
}
|
||||||
|
set {
|
||||||
|
this.validFromField = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <remarks/>
|
||||||
|
[System.Xml.Serialization.XmlIgnoreAttribute()]
|
||||||
|
public bool validFromSpecified {
|
||||||
|
get {
|
||||||
|
return this.validFromFieldSpecified;
|
||||||
|
}
|
||||||
|
set {
|
||||||
|
this.validFromFieldSpecified = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <remarks/>
|
||||||
|
[System.Xml.Serialization.XmlAttributeAttribute()]
|
||||||
|
public System.DateTime validUntil {
|
||||||
|
get {
|
||||||
|
return this.validUntilField;
|
||||||
|
}
|
||||||
|
set {
|
||||||
|
this.validUntilField = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <remarks/>
|
||||||
|
[System.Xml.Serialization.XmlIgnoreAttribute()]
|
||||||
|
public bool validUntilSpecified {
|
||||||
|
get {
|
||||||
|
return this.validUntilFieldSpecified;
|
||||||
|
}
|
||||||
|
set {
|
||||||
|
this.validUntilFieldSpecified = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <remarks/>
|
||||||
|
[System.Xml.Serialization.XmlAttributeAttribute()]
|
||||||
|
public string contentType {
|
||||||
|
get {
|
||||||
|
return this.contentTypeField;
|
||||||
|
}
|
||||||
|
set {
|
||||||
|
this.contentTypeField = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <remarks/>
|
||||||
|
[System.Xml.Serialization.XmlAnyAttributeAttribute()]
|
||||||
|
public System.Xml.XmlAttribute[] AnyAttr {
|
||||||
|
get {
|
||||||
|
return this.anyAttrField;
|
||||||
|
}
|
||||||
|
set {
|
||||||
|
this.anyAttrField = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -3573,5 +3573,17 @@ namespace skyscraper5.Skyscraper.Scraper
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void OnAtsc3FileDelivery(IPEndPoint destination, ulong tsi, ulong toi, FluteListener targetListener,
|
||||||
|
GuessedFluteDataType guessedFluteDataType, string outFileName)
|
||||||
|
{
|
||||||
|
if (!ObjectStorage.TestForAtsc3Segment(destination, outFileName))
|
||||||
|
{
|
||||||
|
LogEvent(SkyscraperContextEvent.Atsc3Segment, String.Format("{0}/{1}", destination, outFileName));
|
||||||
|
Stream stream = targetListener.ToStream();
|
||||||
|
ObjectStorage.StoreAtsc3Segment(destination, outFileName, stream);
|
||||||
|
stream.Dispose();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -106,6 +106,7 @@
|
|||||||
DvbSisTimestamp,
|
DvbSisTimestamp,
|
||||||
DvbSisDaughterSiteAdapterConfiguration,
|
DvbSisDaughterSiteAdapterConfiguration,
|
||||||
Atsc3Detected,
|
Atsc3Detected,
|
||||||
Atsc3ServiceFound
|
Atsc3ServiceFound,
|
||||||
|
Atsc3Segment
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1823,5 +1823,28 @@ namespace skyscraper5.Skyscraper.Scraper.Storage.Filesystem
|
|||||||
|
|
||||||
value.Dispose();
|
value.Dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public bool TestForAtsc3Segment(IPEndPoint destination, string outFileName)
|
||||||
|
{
|
||||||
|
string outFilename = Path.Combine(rootDirectory.FullName, "atsc3", destination.ToString().SanitizeFileName(), outFileName);
|
||||||
|
FileInfo fi = new FileInfo(outFilename);
|
||||||
|
return fi.Exists;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void StoreAtsc3Segment(IPEndPoint destination, string outFileName, Stream stream)
|
||||||
|
{
|
||||||
|
string outFilename = Path.Combine(rootDirectory.FullName, "atsc3", destination.ToString().SanitizeFileName(), outFileName);
|
||||||
|
FileInfo fi = new FileInfo(outFilename);
|
||||||
|
fi.Directory.EnsureExists();
|
||||||
|
if (stream.CanSeek)
|
||||||
|
stream.Position = 0;
|
||||||
|
|
||||||
|
FileStream fileStream = fi.OpenWrite();
|
||||||
|
stream.CopyTo(fileStream);
|
||||||
|
fileStream.Flush();
|
||||||
|
fileStream.Close();
|
||||||
|
|
||||||
|
stream.Dispose();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using System.Net;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using skyscraper5.Dvb.DataBroadcasting.SkyscraperVfs;
|
using skyscraper5.Dvb.DataBroadcasting.SkyscraperVfs;
|
||||||
@ -178,5 +179,15 @@ namespace skyscraper8.Skyscraper.Scraper.Storage
|
|||||||
{
|
{
|
||||||
throw new NotImplementedException();
|
throw new NotImplementedException();
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
public bool TestForAtsc3Segment(IPEndPoint destination, string outFileName)
|
||||||
|
{
|
||||||
|
throw new NotImplementedException();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void StoreAtsc3Segment(IPEndPoint destination, string outFileName, Stream stream)
|
||||||
|
{
|
||||||
|
throw new NotImplementedException();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -2,6 +2,7 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using System.Net;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using skyscraper5.Dvb.DataBroadcasting.SkyscraperVfs;
|
using skyscraper5.Dvb.DataBroadcasting.SkyscraperVfs;
|
||||||
@ -47,5 +48,7 @@ namespace skyscraper8.Skyscraper.Scraper.Storage
|
|||||||
byte[] DvbNipGetFile(string path);
|
byte[] DvbNipGetFile(string path);
|
||||||
bool TestForWneStory(uint sessionId, string filename);
|
bool TestForWneStory(uint sessionId, string filename);
|
||||||
void StoreWneStory(uint sessionId, string filename, Stream value);
|
void StoreWneStory(uint sessionId, string filename, Stream value);
|
||||||
|
bool TestForAtsc3Segment(IPEndPoint destination, string outFileName);
|
||||||
|
void StoreAtsc3Segment(IPEndPoint destination, string outFileName, Stream stream);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -10,6 +10,7 @@ using skyscraper8.Skyscraper.Drawing;
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using System.Net;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Text.RegularExpressions;
|
using System.Text.RegularExpressions;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
@ -246,5 +247,15 @@ namespace skyscraper8.Skyscraper.Scraper.Storage.Tar
|
|||||||
{
|
{
|
||||||
throw new NotImplementedException();
|
throw new NotImplementedException();
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
public bool TestForAtsc3Segment(IPEndPoint destination, string outFileName)
|
||||||
|
{
|
||||||
|
throw new NotImplementedException();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void StoreAtsc3Segment(IPEndPoint destination, string outFileName, Stream stream)
|
||||||
|
{
|
||||||
|
throw new NotImplementedException();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user