diff --git a/backend/images/IRT_logo.jpg b/backend/images/IRT_logo.jpg
new file mode 100644
index 0000000..2e0c9b0
Binary files /dev/null and b/backend/images/IRT_logo.jpg differ
diff --git a/backend/images/dashif-logo-283x100_new.jpg b/backend/images/dashif-logo-283x100_new.jpg
new file mode 100644
index 0000000..8dec461
Binary files /dev/null and b/backend/images/dashif-logo-283x100_new.jpg differ
diff --git a/backend/images/dvb-logo.png b/backend/images/dvb-logo.png
new file mode 100644
index 0000000..78551cb
Binary files /dev/null and b/backend/images/dvb-logo.png differ
diff --git a/backend/schedule_templates/cgsid_1.xml b/backend/schedule_templates/cgsid_1.xml
index 758080c..85c43e4 100755
--- a/backend/schedule_templates/cgsid_1.xml
+++ b/backend/schedule_templates/cgsid_1.xml
@@ -194,7 +194,7 @@
- http://tmsimg.com/assets/p10117343_i_h13_ab.jpg
+ http://tmsimg.com/assets/p10117343_i_h13_ab.jpg
diff --git a/backend/schedule_templates/cgsid_12.xml b/backend/schedule_templates/cgsid_12.xml
index fae6adc..719794d 100755
--- a/backend/schedule_templates/cgsid_12.xml
+++ b/backend/schedule_templates/cgsid_12.xml
@@ -132,7 +132,7 @@
- http://tmsimg.com/assets/p10117343_i_h13_ab.jpg
+ http://tmsimg.com/assets/p10117343_i_h13_ab.jpg
diff --git a/backend/schedule_templates/cgsid_13.xml b/backend/schedule_templates/cgsid_13.xml
index c010be4..5676c54 100755
--- a/backend/schedule_templates/cgsid_13.xml
+++ b/backend/schedule_templates/cgsid_13.xml
@@ -194,7 +194,7 @@
- http://tmsimg.com/assets/p10117343_i_h13_ab.jpg
+ http://tmsimg.com/assets/p10117343_i_h13_ab.jpg
diff --git a/backend/schedule_templates/cgsid_4.xml b/backend/schedule_templates/cgsid_4.xml
index e9dff99..af92f7e 100755
--- a/backend/schedule_templates/cgsid_4.xml
+++ b/backend/schedule_templates/cgsid_4.xml
@@ -159,7 +159,7 @@
- http://tmsimg.com/assets/p10117343_i_h13_ab.jpg
+ http://tmsimg.com/assets/p10117343_i_h13_ab.jpg
diff --git a/backend/schedule_templates/cgsid_5.xml b/backend/schedule_templates/cgsid_5.xml
index 35542bd..7ccf4c3 100755
--- a/backend/schedule_templates/cgsid_5.xml
+++ b/backend/schedule_templates/cgsid_5.xml
@@ -193,7 +193,7 @@
- http://tmsimg.com/assets/p10117343_i_h13_ab.jpg
+ http://tmsimg.com/assets/p10117343_i_h13_ab.jpg
diff --git a/backend/schedule_templates/cgsid_8.xml b/backend/schedule_templates/cgsid_8.xml
index b37077b..2401536 100755
--- a/backend/schedule_templates/cgsid_8.xml
+++ b/backend/schedule_templates/cgsid_8.xml
@@ -132,7 +132,7 @@
- http://tmsimg.com/assets/p10117343_i_h13_ab.jpg
+ http://tmsimg.com/assets/p10117343_i_h13_ab.jpg
diff --git a/backend/schedule_templates/cgsid_9.xml b/backend/schedule_templates/cgsid_9.xml
index 60dcd24..626c7cd 100755
--- a/backend/schedule_templates/cgsid_9.xml
+++ b/backend/schedule_templates/cgsid_9.xml
@@ -193,7 +193,7 @@
- http://tmsimg.com/assets/p10117343_i_h13_ab.jpg
+ http://tmsimg.com/assets/p10117343_i_h13_ab.jpg
diff --git a/backend/servicelists/example.xml b/backend/servicelists/example.xml
index 79771c5..2f76171 100755
--- a/backend/servicelists/example.xml
+++ b/backend/servicelists/example.xml
@@ -14,6 +14,9 @@
+
+
+
@@ -73,6 +76,12 @@
IRT test channel
IRT测试通道
IRT
+
+
+
+ INSTALL~~LOCATION/backend/images/IRT_logo.jpg
+
+
cgsid_3
@@ -190,6 +199,7 @@
DVB
cgsid_4
+
tag:dvb-i-referenceapp,2023:Parental-1
@@ -201,9 +211,64 @@
Parental rating service 2
DVB
+
+
+
+ INSTALL~~LOCATION/backend/images/dvb-logo.png
+
+
+
+
+
+ tag:dvb-i-referenceapp,2026:Digest-1
+
+
+
+ https://refapp.hbbtv.org/livesim/02_llamanofragv1/manifest.mpd
+
+
+
+ Digest Svc Logo #1
+ DVB
+
+
+
+
+
+
+
+ INSTALL~~LOCATION/backend/images/dvb-logo.png
+
+
+
+
+
+
+ tag:dvb-i-referenceapp,2026:Digest-2
+
+
+
+ https://refapp.hbbtv.org/livesim/02_llamanofragv1/manifest.mpd
+
+
+
+ Digest Svc Logo #2
+ DVB
+
+
+
+
+
+
+
+ data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHIAAAAxCAYAAAAGEf2/AAAAAXNSR0IArs4c6QAAD9VJREFUeAHNXGlwHMUVft0zu+tDMgYbGyjCHQMxECqFIYnDaTBgsCFgyxIGB4wsySaEUAkVQlGFSH4kRTmAwYcsX5y2JO6QEBsoDEUMFQiBkBAw5r5sk+ADbKQ9pjvf65VWWu1Mz6xYSdul0cx0v+5+3e/1u7pnBc1tGUf9nbTaRZI8GjGqnRacvae/uytJ+/PbKki4B1AqVZLmChqJI6cjrWhYYhdRRZLunPJlAYwt4/LVI2nY8NE0ZsZ71CiUoPqWDht8acr0bhJCkRa403/R5nu4v0aKXqR4+jW689LiBlEapOyt1LfcTm68gTL9REhMAJFWmJfdeAANxMek9ask5DqS+llaUsX5/mluywQsjGtIxtrJS31Ew50FghpatT90KXMZaSSBu7lk9p5Jc+4HyFuHMd1HTTM3csagp9o1Y8mR/ybpjOa57t/UOTfSwZxgXrg/7b1JSiyi5O5VdNcVhQutrvUGEmpvVDgSi+M51HlRggtQsb8vRg6X8oi8DBkuTyezeUIcQtJtAFLPUUPbOjDWxP6duAitO7Ka3MRog+9AzY0Hps5gTvhO8mhy3cU0tOJJmtd2ZAHGQndgQbNw3oH7SHKdJFhgkBMTlwegtUOOezYG8QzNa72D6tr2GhTMLl89BP3WGiIOCgLoVDGzY06kezIY/Amau2Z8HiqefIQ0tVMs8T4J/QmN/c+rrCMHQLTmoWF/YdHrJsCZqZcpoy6l5dVv2yuUuHTe2mkkYo8ZyVHipvvUnIuF56UhaoedQs1T/5fXxtVPJGAkgeKgeV5BObywKEtDLUh3AkTGU1S/9oQBRcujOqOrQjtlfc+6vsjLGDmhjXcDsLHlJo4msefX3ZmdT51E5LfoK5IRdmMFbVkzzFpn/cv6sVNPWiv0KnTQn/I+ojRNopVV7/QqLf1r7ZrjoJtegpiHSLAJKjZQNJuzbIEXkcRw1BsBwsA2wXwYfRihujGC9C4YNsdRc9VHfjVcv8yCPG6I1HuUSq4tKLNlCBoBi3RfIH8Q5mUcObHRxmo11qptojob5YG6cdRN3UdzVp5Fq678ytbdNy6TYi6YNUFsiNkSi7t08iaIjaU2sIIySfBNxX7kJU8AUWbCKj49a2iCqLbERHcTe1Gm/XyALfEDjUZINo2V2kTN1Tf6NRIpb34bBuD9CDLgUpLiPDjbbiSOZNESG3IS+vgNrmsj9dUXIHY5SM6krEsU3IIEU2dSWzAhKzAfcOaLSgz/Ka5XwNzNsNBnknAW4RoVblwx44tT8c+XkLzUoiVNoOY3SEuqttKyqgepqepCyJQzgPgLxqiJ0iRbcMKZT/VtP4gC3icYR1ZRLL6vEXm2BljcE62k5kvyDQ9bHd8yoampuoUymTkoZp/DnnhVst94WqPv4otOSHs3xZUurXme1NCzYJkugbgNr8sGkONAnqlGatSlx5mtP6K5oauCVUw6vZPczIpwpCNCLK/5I/p9JnQejD8LHXvIwWVESB5j89SvEcm5Cj7TbdCD4aNmESudM+mTlonhwEVCpHZOhg97rPHfbFUN03kttHjWhzaw4svE08QiOywJpqZ/ilDbv2LJctXOX0EvrYtETOlKCPi6kvWda0jUg0tyb74P7N96qQ5SsUW+5d8kU6jtViO5u21NlWN9iRmCfXcL/fbUXJ+G5fZTGD4IN4WgY8x1cQ4Zw6REGNXddyz076RQw8usRv04LZ/+Rol67m5G0z6h7mV2brYhAMBuT0EKmbkC+P7JaK5+F1bxonA9wWZ4nF2Y80qGiIzVol+E5XwZvbsbhSCx1Ld3Z5TwScuJpEL6zxLyX+jVF7A8CGnmxFkBEbvT+Jm2OWI1IUSNDSRyGa9sTdWRVqPKbKDF1S9GbjsqYEPLMXDHJpMKMVzZahX66aBmy4eQHLHQah2xcWpLHFCWYiLVrTnKBhapzHVnYIWPCXU5mHmUuAMM5LsaIvXlB9S4wcWe7C0IRw4zgQE/GM5jPz6T/pCU80wgSFDBoORLcRdMcftk8aS68aGw8i7+Rjiyy6FVLfb+7M2wbvQyL5PYtd4OWGTprPtG0NbPlyGSdC6MKHtlxkHQHQjPBQYgymdF8lBilc/CBXgDroB9YLz1pWkGzWgLWb6WZpK7z0Q/3420yyFpIbFRVoo07/69EdGposr4BujmOaFinXeCMh3Pkx7eZOs+ZMZsVfuhjKP5dS33QJTcYp1g3pyWzrE0Sk0AFhv7hokO3+VgkealN9HXqUeL7qOu9SpEis42+4rdlSsgor+N4MaBxmRh39iWzHZeejO4drbxuy2w5UVIg6hsxeBvhCsywqq72KfMdLDRUzwhr3pwPOK+k0NXg8T0KG8p3Tu7uANjDQ+PQQjoZujUUXn+sdG1kCbMiLbEDGREemoDgOdQU80HNnAuKy/Ryhhlt2nWh4rXrE85rU8nCTJeLSZ4SLiBkfqEZMU9jFZRSSXh0sRHmX1VXnVdF+NsYqYBrbGLkfVXP8DuynXUvmdKFCJya2W4IoGVVquwEmYEDDebzRPixL6FVTUJGQ9bYXsWXt22L6VUTeguB+tp3bGSlp6/o2f10GdzREXVhYb7ejeU9RPZcl+Cg6NN1Dwz0LDpXZXfy29FMlbJJIweD6fYQviMw2aaLuEqkVNKweVIwH8EIwQlntR0cgdmZ2UQSGC+ULNwluZg4B8I4lvA+Gg1BoGReiyv1TT/gdnEhlHEVJ6E5COAWq81/pNtICyqBJ1JVz90oA0sV9YIK1dT+C4Hn4TQdD8tqfk4VzfKQ93jw1BxftFE7G57CPTqodir/TGuu4niL+FM1RXdxcFP5UlIg69ohX+FA81YdUHJ+JTYOU+lpwWB5OVvScPlcI63ir1scBzGjVqcVzfKi9xdRYnK8WYng3d0Ai+4FMY39Bkbr0yjU5Pc4xGAW4VjoqvpsntwTCQ4hciu4Ir9XsLx17qW9TDhLzYDC+owKyKrqbGxCZdFXqIB7dabVW4TexxZyiQfxcbxW0FdBufLzdDZs3EkxgICThH6MFDyVKz6H4JQ8UDr2eAJER0bcjkN0xVUt+ySIH+2vAjJsU/51fYcsho6Snn2CI4x5eVJtG3cMZi91wNnsL7tO6DkZLuRgxWicNbDo75tVWVPykd3hxraToQb9FtYuHCFLD4lnyqMJaZTuvIfGN/v/MZYXqLVEdeQqOw+/phu34CBvmk3ejhkB65WToiVC5cjBpcDyyAwsW5U3lO0YubfAmFKWdBUhRN7O84HEW81otbWNp8lEs71kFKH+4GVDyHrlsVwsgzEkJfmEGWjR1AL9Fouy/eBRZDQF1P2lHghyBVwOYS4xL4aUc20g+A4GitspJ9yOPS3/1vXYffjL1ZisgpxEyPIEQ1+mJQPIeXIExEEYG67iK5s2yeHbBzWYzq5x2r08I6IcI+iROLkXL2eDzE1PdTlYONDqRdJ7XymZ9UBeWbd7tFNYCRjhgf2ycVKXUDXtg3tDVM+hNTqZ7D2BCy9/Uh6OGnXme6E0UOESA8m2pakAwUnC31KDqwLPTd0l4PbVho7DCUKjttw9SsTu/CZofeO9ewOH/IW8jDao47u3UR5EJKPOQr3QiP62KWQdEXeaTmtEemxG6RZy09PwT7l6LxB7kNn4DvC463xTQ48ZPB9RYV8LK/uQL4wAwnxrt13xtw4MQfEHt8btcEnJDvRQi8EcrD7gajZ2XC/T1vXdBs9VLEBOmSzdZBZHTIGm87n5g1Se/PMSs/L7PXCQWoBS/W2qvZeJQP8KsBRIeqZ/VztHdwbscEnpNj9B3DZhG5fCgOROIWunMtzyPLRSY60hO1Tmgo9joHUthwNIuL8LHRLUDK77/jqV3prg0AGJJ+NPaER2guRPFk679cbp0EkpOavpRfAhyr8vDur8y8itja7kuvA6EnZjR6up8UpNL/tCFPNpSuhc4dadzmYOYRupqWziguOd+FVqruuHAdEDg0lpOlPFBgMg0PIOWsPoIYH78fK+4Wv7jJiMj6WEuqi3Dwt4a+x1JNWoyd7DGQ4eWqaCWlpuBy21cjB8UzqC0rp1bl+ButBynowtd3PZdw4qqdpe280B5aQHC9saJ1DCeevEJM1nQZKb5yy70xMrWuJDyh1JS3vse5aMFw2/HYhDYv/BIGC/a0cboLj+l5aVfNZVxeDcq9fOwnW6FxrdKcnYg693/OVn7snqXdJ73cBT6cviY0ZvWc8HNlzYJXx10fjDTH4wxxb8tCddL5Hn26ZCLDnDOiI5FP0ZfwdBAiO6CRYYQvsU2o6CZx7jO9q76rBRkMmvRun2Ir7NK6rfqnuDa0IQYomzM0QK9OZ/hjnFA50U0HkKRoheXUoOoTqW32jCoVjUvj+X7JCPpzE1+zzHAaxIc2ug03U5TUEre7gg1BPXYnsLCEX4MhFw1oWyew850HnvQgB3xEX4x2UODieTj5S8Gl7f3wk1BOHz5qHUHzvsfisHp8KSj6qMhW4Cut4uuqzPvdSr9Km/d7oyuq6RyMkT5rEL004seK4l3UWHzdkSyxsBXZh1HU3B5+4kl7XlWXuOnY/uPKXGPzwYCOG+8UVmMDZHvaKHLkwBzKjzaF91N207eFjQg8L5yr14UHsVUEZjc2BWIVReMZAszBczy5YipC8nZ49HWInP0UjJNdh7i6WGPl9RX/jKI7W2zGh9dRc82BexWXTN2OzFZ+hxaeCoHlFkV9YN2ZS6/F9Iu8mZNNIhS+yYrPQMeYq+rR0VY9+ZybDXEaWTJ0t81cN6Y5Habts8+urPzH268+exxzHm7Fe5nXiA1LLa172rSCwcrSe6lsWJVN5+MUpxd9xdC1b7BHSdaZq2Am3KO2XGsacbU39ExJkHj1Q5atTBtZqDRxgJwFJpGCALKTUrtOhu/yJyG1Idz04OiScFdCZCY5nXqAv3OdyEPWtJ8OAOqXoVZJroJ8emLF5JXqpjfjA9gL8rNnWoJ4Gl5CsB5nbhEjDEHoI6+M0fJr+c1pZW+An5Q0g+zttESM9eTWzLwp6JsfZCEwIfT0sZCBTJon9WzMv8muogN8j7HgOrbR/XDsAohVchT/zjznMxDVx541SrXE0IvMn0nINNU3/e1HTKNNrKCOuAxPYIzc9G80Gx1+ndPufc9l1bafBJcKJcOAzGMkYMDxHIB7PDUt7L/M5Lvxok15Cy6tei4KWaxqIAtlXGA3zUfNv0uivQLBtpNNv4w6xqTdSZfIVYpeiL2npZZtg9GwA506JLBJ5olRmce6H+ji+KfUNCE5I4AUsDMf1BZu+1THukeZAPX5DR32C0xAgmnzWfHXVfPGWYhpFcJpOLqZCUbC83tOaPf9dsDJ3kjpoBy07oXSs7+gG/MDRwdAfEdFKaUq246dROtOOvQWN0o2wjm/GPAxsyspCzI3cQQmE3G6dgS+2+34y4f/NkOYFYZbGcAAAAABJRU5ErkJggg==
+
+
-
+
tag:dvb.org,2020:DASHIF-LL
@@ -239,6 +304,12 @@
DASH-IF livesim LL
DASH Industry Forum
+
+
+
+ INSTALL~~LOCATION/backend/images/dashif-logo-283x100_new.jpg
+
+
diff --git a/frontend/android/images/invalid-digest-image.jpeg b/frontend/android/images/invalid-digest-image.jpeg
new file mode 100644
index 0000000..46ca268
Binary files /dev/null and b/frontend/android/images/invalid-digest-image.jpeg differ
diff --git a/frontend/android/player.html b/frontend/android/player.html
index 5a425d3..86f8631 100755
--- a/frontend/android/player.html
+++ b/frontend/android/player.html
@@ -24,6 +24,10 @@
+
+
+
+
diff --git a/frontend/channel-common.js b/frontend/channel-common.js
index 191c71b..018e2bc 100755
--- a/frontend/channel-common.js
+++ b/frontend/channel-common.js
@@ -135,10 +135,13 @@ Channel.prototype.parseSchedule = function (data) {
var howRelated = relatedMaterial[k1].getElementsByTagNameNS(TVA_ns, "HowRelated")[0].getAttribute("href");
if (howRelated == TVA_Promotional_Still_Image) {
//Program still image
- program.mediaimage = relatedMaterial[k1].getElementsByTagNameNS(
- TVA_ns,
- "MediaUri"
- )[0].childNodes[0].nodeValue;
+ // program.mediaimage = relatedMaterial[k1].getElementsByTagNameNS(
+ // TVA_ns,
+ // "MediaUri"
+ // )[0].childNodes[0].nodeValue;
+ var mediaLocators = relatedMaterial[k1].getElementsByTagNameNS(TVA_ns, "MediaLocator");
+ var image_uri = getMedia(relatedMaterial[k1], {});
+ program.mediaimage = image_uri ? image_uri.mediaUri : null;
break;
}
}
diff --git a/frontend/dvbi-common.js b/frontend/dvbi-common.js
index 9314f2c..f02937e 100755
--- a/frontend/dvbi-common.js
+++ b/frontend/dvbi-common.js
@@ -7,6 +7,9 @@ var PROVIDER_LIST = INSTALL_LOCATION + "/backend/servicelist_registry.php";
/* const */ var LCN_services_only = false;
/* const */ var First_undeclared_channel = 7000;
+// this is an inline representation of frontend/android/images/invalid-digest-image.jpeg [[made with https://ezgif.com/image-to-datauri]]
+var INVALID_DIGEST_IMAGE = "data:image/jpeg;base64,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";
+
function parseContentGuideSource(src) {
var newCS = {
id: "",
@@ -604,9 +607,10 @@ function parseServiceList(data, dvbChannels, supportedDrmSystems) {
if (howRelated == DVBi_Service_Logo) {
chan.image = getMedia(relatedMaterial[j]);
}
- if (howRelated == DVBi_Out_Of_Service_Logo) {
+ else if (howRelated == DVBi_Out_Of_Service_Logo) {
chan.out_of_service_image = getMedia(relatedMaterial[j]);
- } else if (howRelated == DVBi_App_In_Parallel) {
+ }
+ else if (howRelated == DVBi_App_In_Parallel) {
var app = {};
var mediaUri = relatedMaterial[j]
.getElementsByTagNameNS(TVA_ns, "MediaLocator")[0]
@@ -616,7 +620,8 @@ function parseServiceList(data, dvbChannels, supportedDrmSystems) {
app.contentType = mediaUri.getAttribute("contentType");
chan.parallelApps.push(app);
}
- } else if (howRelated == DVBi_App_Controlling_Media) {
+ }
+ else if (howRelated == DVBi_App_Controlling_Media) {
var app2 = {};
var mediaUri2 = relatedMaterial[j]
.getElementsByTagNameNS(TVA_ns, "MediaLocator")[0]
@@ -1215,15 +1220,56 @@ function parseServiceListProviders(data) {
return { registryInfo: registryInfo, providerList: providerslist };
}
+/**
+ * extract the image payload from the provided @inline_image.
+ *
+ * @param {string} inline_image
+ */
+function parseImageData(inline_image) {
+ return inline_image.substring(inline_image.indexOf(","));
+}
+
function getMedia(element) {
if (!element) {
return null;
}
var tvaNS = "*";
var mediaUri = element.getElementsByTagNameNS(tvaNS, "MediaUri");
+
+ var content_digest = mediaUri[0].getAttribute("integrity");
+ if (content_digest) {
+ var digests = content_digest.split(" ");
+ var img_url = mediaUri[0].childNodes[0].nodeValue;
+ var img = img_url.startsWith("http") ? NetworkRequestS(img_url, {}) : parseImageData(img_url);
+ var is_valid = false;
+
+ var re = new RegExp("([a-z0-9]+)=:([a-zA-Z0-9]+):");
+ digests.forEach(function (dig) {
+ var parse = dig.match(re);
+ var algorithm = parse[1], digest = parse[2];
+
+ if (algorithm == "sha1") {
+ var sha1obj = new jsSHA("SHA-1", "TEXT");
+ sha1obj.update(img);
+ if (sha1obj.getHash("HEX") == digest) {
+ is_valid = true;
+ }
+ }
+ else if (algorithm = "sha256") {
+ var sha256obj = new jsSHA("SHA-256","TEXT");
+ sha256obj.update(img);
+ if (sha256obj.getHash("HEX") == digest) {
+ is_valid = true;
+ }
+ }
+ });
+ return {mediaUri: is_valid ? img_url : INVALID_DIGEST_IMAGE};
+ }
+ else
if (mediaUri.length > 0) {
return { mediaUri: mediaUri[0].childNodes[0].nodeValue };
}
+ return null;
}
function getImageSrc(image, defaultImage = "./images/empty.png") {
diff --git a/frontend/network.js b/frontend/network.js
index a7f2c57..ecf18f7 100644
--- a/frontend/network.js
+++ b/frontend/network.js
@@ -10,3 +10,20 @@ function NetworkRequest(url, settings) {
settings.url = url;
return $.ajax(settings);
}
+
+
+
+function NetworkRequestS(url, settings) {
+ // settings.accepts= { mycustomtype: "application/vnd.dvb.dvbi.r8" },
+
+ settings.beforeSend = function (req) {
+ // Chrome:: Refused to set unsafe header "User-Agent"
+ // req.setRequestHeader("User-Agent", "DVB-I/A177r8");
+ req.setRequestHeader("Accept", "text/plain, */*, application/vnd.dvb.dvbi.r8");
+ };
+
+ settings.url = url;
+ settings.async = false;
+ var request = $.ajax(settings);
+ return request.responseText;
+}