Самая короткая версия для преуменьшения существующего JSON: (изменить: с помощью JSON.net)
JToken.Parse("mystring").ToString()
Вход:
{"menu": { "id": "file", "value": "File", "popup": { "menuitem": [ {"value": "New", "onclick": "CreateNewDoc()"}, {"value": "Open", "onclick": "OpenDoc()"}, {"value": "Close", "onclick": "CloseDoc()"} ] } }}
Выход:
{
"menu": {
"id": "file",
"value": "File",
"popup": {
"menuitem": [
{
"value": "New",
"onclick": "CreateNewDoc()"
},
{
"value": "Open",
"onclick": "OpenDoc()"
},
{
"value": "Close",
"onclick": "CloseDoc()"
}
]
}
}
}
Чтобы красиво напечатать объект:
JToken.FromObject(myObject).ToString()
2) Почему мой MediaSource.duration всегда «Бесконечность», а не правильная продолжительность?
blockquote>Вам нужно вызвать
MediaSource.endOfStream()
в порядок для объекта MediaSource для вычисления фактической продолжительности сегментов вSourceBuffer
. Я вижу, что вы это делаете, но похоже, что вы пытаетесь получить доступ кMediaSource.duration
перед вызовомendOfStream()
. Я предлагаю вам прочитать в конец алгоритма потока в MSE Spec, вы заметите, что это приведет к вызову алгоритма изменения продолжительности .Если вы хотите, чтобы ваш элемент
<video>
сообщал о продолжительности до вызоваMediaSource.endOfStream()
, вы можете фактически установить значение с помощьюMediaSource.duration
на основе вашей собственной оценки добавленных сегментов.1) Почему это не делается должным образом при настройке последовательности MediaSource.mode?
blockquote>Насколько мне известно, это следует сделать. Но я предпочел использовать явный подход
timestampOffset
, поскольку он обеспечивает большую гибкость при желании добавлять сегменты далеко впереди в буфере (т. Е. Если пользователь ищет путь впереди текущего конца буфера, вы захотите начать загрузку + добавление после пробела). Хотя я ценю, что ищу, чтобы я не был требованием в вашем прецеденте.