pavel-pimenov / flylinkdc-r5xx

flylinkdc-r5xx
GNU General Public License v2.0
54 stars 26 forks source link

Опция просмотра содержимого #938

Closed pavel-pimenov closed 8 years ago

pavel-pimenov commented 8 years ago

From entry....@gmail.com on January 23, 2013 16:39:29

[Enhancement] Неплохо бы иметь опцию просмотра содержимого мультимедийного контейнера.

По аналогии опции "просмотра содержимого zip архива", в каком-нибудь менеджере закачек.

Скриншот примера содержимого на mkvmerge GUI см. вложение

Для вопросов - "зачем ?" Далеко не всегда по имени файлу понятно, есть ли например внутри какая-либо русская звуковая дорожка и т.п., а когда аналогов по tth нет, то кроме как начать закачку или попытаться выйти на связь с пользователем, ничего не остается, чтобы узнать... ну как-то так

Attachment: mkv-inner.png

Original issue: http://code.google.com/p/flylinkdc/issues/detail?id=899

pavel-pimenov commented 8 years ago

From entry....@gmail.com on January 23, 2013 07:43:17

type of issue не выбирается, ну в общем понятно, что выше is not Defect

pavel-pimenov commented 8 years ago

From tret2...@gmail.com on January 23, 2013 23:46:50

В программу интегрирован модуль MediaInfo, который позволяет вам самим посмотреть медиаинформацию о содержащихся у вас файлах. Так же вы этой информацией делитесь с другими участниками файлообмена. т.е. если у кого-то стоит новая версия программы вы получите от этого пользователя файллист со всем описанием. В недавнем времени мы начали разработку возможности просмотра медиаинформации в окне поиска. Так что эта возможность уже фактически реализована, осталось подождать когда большая часть пользователей, а так же вы, обновите программу.

Status: WontFix
Labels: -Type-Defect Type-Enhancement

pavel-pimenov commented 8 years ago

From entry....@gmail.com on January 24, 2013 01:47:57

хм.. но этот способ ограничен не только клиентами Flylinkdc, но еще к тому же и его версиями :(

Не лучше ли сделать опцию, по нажатию которой, качается первые ~300-500кб запрошенных данных медиа-файла у пользователя, а далее просто берется информация из полученных заголовков контейнера, ну и показывается например во всплывающем окне ?

Размер данных весьма скромен, но этот способ должен быть универсален, т.к. можно будет получить полную информацию о выбранном медиафайле не зависимо какая программа-клиент у другого пользователя.

pavel-pimenov commented 8 years ago

From Pavel.Pimenov@gmail.com on January 24, 2013 01:55:47

Эта информация получена через mediainfo вы пробовали ей скармиливать не полный файл а обрубок в первые 300-500к?

pavel-pimenov commented 8 years ago

From entry....@gmail.com on January 24, 2013 02:08:54

нет, не пробовал. посмотрел только первые 300кб данных в попавшемся файле. По крайней мере Title дорожек располагался в этом диапазоне. Соответственно следует действовать в обход mediainfo, если тот противиться

Чтобы не было скучно, привожу пример (во вложении файл header 477 КБ) - попробуйте его открыть например в mkvmerge :) ну или любом hex редакторе

pavel-pimenov commented 8 years ago

From entry....@gmail.com on January 24, 2013 02:16:49

а есть какой SDK для Flylinkdc ? если так усердно никто не хочет с этим возиться, хоть для себя напишу какой плагин, как удастся время выкроить...

pavel-pimenov commented 8 years ago

From Pavel.Pimenov@gmail.com on January 24, 2013 02:22:45

Вложения вашего не увидел - заливайте на обменник. Сюда наверно не все пропускают Объем исходного кода либы mediainfo на С++ "7 205 222 bytes in 352 files" Автор mediainfo за добавления туда новой фичи парсинга DVD каталога просит 600$ А вы предлагаете повторит всю работу с неизвестным результатом чтобы не было скучно? Запрашиваемая функциональность будет реализована тут http://www.flylinkdc.ru/2012/12/blog-post.html будет поддерживаться во флаях и всех его клонах.

pavel-pimenov commented 8 years ago

From Pavel.Pimenov@gmail.com on January 24, 2013 02:24:05

Плагинов во флае нет (кроме портал браузера) только хард-код - все исходники открыты.

pavel-pimenov commented 8 years ago

From entry....@gmail.com on January 24, 2013 02:40:46

скопировал сюда: https://docs.google.com/file/d/0B0-ygoNBOTDcOE92QVVwSWdhTW8/edit Собственно из того что требуется, нужно по большей части только название и тип всех дорожек, что там имеется. На основании типов контейнеров, можно вообще самому рассчитать offset и далее просто вытащить необходимые данные. ну по крайней мере с mkv дела обстоят проще.

Кроме того, есть же консольная утилита mkvmerge! (из состава MKVToolNix) Можно также вытащить инфу через нее. GUI версия работает без проблем. так, что и велосипед не надо никакой изобретать.

Пропустите пример высланного файла через нее. http://www.bunkus.org/videotools/mkvtoolnix/ исходники там же

pavel-pimenov commented 8 years ago

From entry....@gmail.com on January 24, 2013 02:46:14

Pavel.Pimenov вот и жалко, что нет плагинов :( пересобирать для себя проект только для этого, не очень конечно..

нужно то:

pavel-pimenov commented 8 years ago

From Pavel.Pimenov@gmail.com on January 24, 2013 02:54:52

Если mkvmerge при этом упадет что будет? вечером гляну на ее исходники. p.s. После внедрения во флай mediainfo было найдено около сотни хитрожопых файлов на которых медиаинфе сносило крышу и она валилась утягивая за собой флай.

pavel-pimenov commented 8 years ago

From entry....@gmail.com on January 24, 2013 03:11:14

ок, спасибо за проявленный интерес

"Если mkvmerge при этом упадет что будет?" а что с отдельными процессами о_О ну или точнее в пример браузер chrome, когда падает какой-либо процесс его плагина

Вообще, достаточно же будет использовать бинарные файлы mkvmerge, куда-то интегрировать его логику во flylinkdc вряд ли имеет смысл

(хотя не в курсе какая архитектура flylinkdc, поэтому вам конечно виднее)

pavel-pimenov commented 8 years ago

From entry....@gmail.com on January 24, 2013 03:22:25

э ну вот, обновлялся чтобы проверить mediainfo, теперь в новой версии база имеет эксклюзивную блокировку от FlylinkDC.exe Теперь до статистики так просто не достучаться :( https://bitbucket.org/3F/flydcstat/wiki/Home Хотя конечно exclusive lock flylink'у конечно только на пользу... все же плагины были бы кстати

pavel-pimenov commented 8 years ago

From Pavel.Pimenov@gmail.com on January 24, 2013 03:25:09

Я не знал про утилиту - FlyDCstat эксклюзивную блокировку давно включили. просто без нее может получится так, что если вы внешней программой делает тяжелый запрос к базе флая. сам флай может упасть по таймауту и завершит работу

pavel-pimenov commented 8 years ago

From Pavel.Pimenov@gmail.com on January 24, 2013 03:56:59

Вот свежий пример последняя версия Mediainfo грохнулась при анализе файла. https://www.crash-server.com/DumpGroup.aspx?ClientID=ppa&DumpGroupID=28879 т.к. пользователь не отослал полный дамп файла - мы не знаем на каком файле упала и не можем сообщить о пробелме автору либы

pavel-pimenov commented 8 years ago

From a.rain...@gmail.com on January 25, 2013 07:38:22

э ну вот, обновлялся чтобы проверить mediainfo, теперь в новой версии база имеет эксклюзивную блокировку от FlylinkDC.exe

Она отключается в настройках, необходимо снять галку "Использовать монопольный режим работы с базой SQLite...", после чего перезапустить клиент. http://flylinkdc.com/dokuwiki/doku.php?id=ru:advanced

pavel-pimenov commented 8 years ago

From entry....@gmail.com on January 26, 2013 02:40:00

ага :) спасибо, буду знать только вот из-за большого кол-ва проблем в новой публичной версии, откатываюсь обратно см. Issue 904 ----

Pavel Ну как ? шансы есть ? или только своими усилиями

pavel-pimenov commented 8 years ago

From bobrikov on January 27, 2013 05:19:14

Встроенная медиаинфа и так уже показывает всё, что только возможно по множеству контейнеров. И качать ничего не надо, вся инфа по дорогам, включая язык вообще передаётся с файлистом.

И встроено это во многие клиенты, такчто с дефицитом инфы не должно быть проблем.

При использовании поиска подобная, но полнейшая инфа будет так же выдаваться. Это уже в разработке.

pavel-pimenov commented 8 years ago

From entry....@gmail.com on January 27, 2013 05:57:02

хм, даже из тех единиц, что мне на редкость попадается, я вижу например только: "22mn 53s | AAC, 2 channels, Russian | AAC, 2 channels, Japanese"

Когда в этом же файле Title первой дорожки: "Mangaka & Milirina [Anything-group]"

Это принципиально важно, т.к. русская озвучка может быть например в 6 вариантах, а получаемый файл может содержать только то, что не нужно

Пример с файлом, смотреть во вложении: screen0.png, screen1.png

Attachment: screen0.png screen1.png

pavel-pimenov commented 8 years ago

From entry....@gmail.com on January 27, 2013 06:21:33

или вот еще пример,

screen0.png: т.к. информация о языке дорожки не определена, то выводиться соответственно: "24mn 0s | MPEG, 192 Kbps, 2 channels | AAC, 2 channels" т.е. и вовсе не понятно что внутри, есть ли там русская озвучка или нет, и т.п.

Когда в этом же файле, несмотря на отсутсвие информации о языке дорожки, Title определен как: "Noir [AniDub] NarutoFilm" - screen1.png

Attachment: 0.png 1.png

pavel-pimenov commented 8 years ago

From Pavel.Pimenov@gmail.com on January 27, 2013 06:23:27

Можно уточнить что не правильно про русскую озвучку? я что-то не понял что требуется поправить во флае?

pavel-pimenov commented 8 years ago

From entry....@gmail.com on January 27, 2013 06:43:59

Pavel: bobrikov упомянул, что все это уже есть, и доступно почти везде и всем.

Ну да конечно, что мне например делать с чел. на клиенте pl++v5.96 с 5тб данными у которого колонки с этой информацией все пустые, что конечно не удивительно ну и прочими...

Ну и привел примеры, что даже там где эта инфа публикуется, то по крайней мере не доступен title, который зачастую требуется чтобы идентифицировать n-ую запись.

в общем то возвращаясь к #10, #11 шанс увидеть какую-нибудь реализацию есть ? неужели VS ставить :(

pavel-pimenov commented 8 years ago

From Pavel.Pimenov@gmail.com on January 27, 2013 07:03:48

Интеграцию с mkvmerge я пока не осознал. я также не понял как это поможет юзерам заброшенного PL? p.s Думаете установка студии самый сложный шаг в этом деле? :)

у вас есть скайп - хотите подключиться к нам в чат разработки? кидайте логин в почту pavel.pimenov@gmail.com я авторизую и перекину в конференнцию.

pavel-pimenov commented 8 years ago

From bobrikov on January 27, 2013 07:10:16

Я всё прекрасно понимаю, данные теги читаются полностью и будут видны. Если привычный вид медиаинфогого текста вам не чужд, тогда всё ок.

Также я понимаю, что поддержка других клиентов это дело хорошее, но медиаинфа встроена даже в оригинальный клиент, пусть бы и остальные почесались. Имхо данная фича, как практически дубликат уже разрабатываемой, как минимум появится не сразу, как максимум не появится уже никогда за ненадобностью.

Если напишете заплатку, плохого конечно не будет. Из-за косяка матроски медиаинфа, да я так понял и сама матрёшка, не сможеть дать инфу о битрейте по заголовку, если у 2+ дорог VBR.

Тайтла в файле может и не быть.

pavel-pimenov commented 8 years ago

From A.Kuda...@gmail.com on January 27, 2013 07:10:53


Stream size : 308 MiB (6%) Title : R5 Language : Russian


pavel-pimenov commented 8 years ago

From entry....@gmail.com on January 27, 2013 07:24:22

Думаете установка студии самый сложный шаг в этом деле? :) ага, ведь с настроенным инструментарием уже остается только писать :) кроме того проблема таки в лицензии :) хотя может под чем другим можно также собрать

bobrikov:

...данные теги читаются полностью и будут видны.

о_О это где еще смотреть ? каких-то пунктов в FlylinkDC по mediainfo у меня больше нет. Или в настройках где ?

A.Kuda...: это где такое ?

pavel-pimenov commented 8 years ago

From bobrikov on January 27, 2013 07:30:02

это я с браузера жены нечаянно.

это всё встраивается, уже говорили выше

а тайтл и прочее смотрите в медиаинфе, как обычно

Attachment: Снимок.PNG

pavel-pimenov commented 8 years ago

From entry....@gmail.com on January 27, 2013 07:53:50

bobrikov: вы меня запутали :)

это, или похожее окно, вызывается как-нибудь из flylinkdc ? т.е. кроме колонок с неполной инфой еще где-то есть куда смотреть ?

для примера открыл XML файл листа пользователя, смотрю первый попавшийся узел: File Name="AMV Hell 4 - The Last One.mp4" Size="734515375" TTH="U4KTSBUSFRTKMAXXBSJVEALUO55TFBQ2SBFWO7Y" HIT="1" TS="1355260896" BR="128" WH="640x480" MA="1h 24mn | AAC, 128 Kbps, 2 channels" MV="AVC, 1 025 Kbps, 4:3, 23.976 fps" не нахожу

т.е. то что у меня на компе, это соответственно не то.. на уже скачанном файле и без того у меня не мало утилит с выдергиванием инфы

pavel-pimenov commented 8 years ago

From bobrikov on January 27, 2013 08:03:54

это БУДЕТ будет БуДеТ разрабатывается, в разработке, встраивается

такое же окно вы будете получать кликнув на кино. будете :)

pavel-pimenov commented 8 years ago

From entry....@gmail.com on January 27, 2013 08:36:33

bobrikov:

такое же окно вы будете получать кликнув на кино. будете :) еще не скачанное или не инициированное на скачивание ? тогда о чем мы тут с вами говорим :)

разве что только сам способ... т.е. если эта инфа будет добавляться в файл-лист, и соответственно далее браться из нее другими пользователями, то конечно способ будет работать только если у другого пользователя клиент (flylinkdc или его клон впоследствии) добавил эту инфу в файл лист.

И как в примере выше, я не смогу получить информацию у пользователя чей клиент на pl++ и прочих (тот же FlylinkDC++ всех прошлых (а ныне текущих) версий окажутся не удел), т.к. у того пользователя подобной инфы в файл листе соответственно нет.

из-за ограниченности круга клиентов для такого способа, таки было бы как раз неплохо предусмотреть этакий запасной вариант :)

pavel-pimenov commented 8 years ago

From bobrikov on January 27, 2013 09:22:34

я с вами полностью согласен, но сейчас мы очень усердно пилим эту фичу, пока на остальные тождественные времени не остаётся.

только она будет не в файллисте. на сервере.

и да, я лично ратую за обновлнение пользователями своего по. понимаю, что это не корректно и это лишь только мое мнение.

pavel-pimenov commented 8 years ago

From entry....@gmail.com on January 27, 2013 09:33:12

"я с вами полностью согласен, но сейчас мы очень усердно пилим эту фичу, пока на остальные тождественные времени не остаётся."

ясно :) спасибо

"и да, я лично ратую за обновлнение пользователями своего по." ну как бы не все обновления бывают одинаковы полезны :) см. мой Issue 904 поэтому пришлось вернуться на старую, но относительно стабильную r501 10975

pavel-pimenov commented 8 years ago

From bobrikov on January 27, 2013 09:54:03

и это пилим. тоже усердно :)

pavel-pimenov commented 8 years ago

From entry....@gmail.com on February 17, 2013 02:39:19

решил покопаться с этой темой на досуге,

В конечном итоге выяснилось, что 2012 отказывается работать под Vista (из MS семейства, дома ничего новее нету), далее осталась 2010 версия.

VS2010Express идет без ATL, а значит пришлось отдельно вытягивать полный WDK и от туда пробовать использовать либы ATL, потом еще также WindowsSDK. в общем после 10гб трафика на весь этот софт и потраченного времени :( express версия по прежнему выдавала не мало косяков на стадии компиляции и сборки.

Надоело, удалил весь этот мусор, поставил пробную 30д версию, к которой также, сплошные нарекания


В общем то, просто выделил отдельную функциональность, которая получает первые 250кб данных, ну а далее через MediaInfoLib (раз используется, почему бы и не его) получается title, language, format, bitrate и выводиться в окошке.

флаги:

/* first block of data :: Issue 899 / FLAG_INCOMPLETE = 0x2000, FLAG_MINFO_AUDIO = 0x4000,

....

под типы:

static bool isVideoFileForInfo(const string& file) { string exts[14] = {".avi", ".mp4", ".mkv", ".mpeg", ".mpg", ".ogm", ".rm", "wmv", "mov", ".mpe", ".m1v", "m2v", ".flv", ".m2ts"}; for each(string ext in exts){ if(isSameFileExt(file, ext, true)){ return true; } } return false; }

...

обработка заголовков:

string MContainerInfo::getStrAudioTracks(string target) throw(FileException) { if(!File::isExist(target) || File::getSize(target) < 6 * 1024){ throw FileException("target is not correct"); }

static MediaInfoLib::MediaInfo dll;
if(!dll.Open(Text::toT(target))){
    throw FileException("target is not open");
}

try{
    const size_t count = dll.Count_Get(MediaInfoLib::Stream_Audio);
    string output = "Audio Tracks ("+ Util::toString(count) +"):\n";
    for(size_t i = 0; i \< count; ++i){
        string lang     = Text::fromT(dll.Get(MediaInfoLib::Stream_Audio, i, _T("Language/String")));
        string bitrate  = Text::fromT(dll.Get(MediaInfoLib::Stream_Audio, i, _T("BitRate/String")));
        string format   = Text::fromT(dll.Get(MediaInfoLib::Stream_Audio, i, _T("Format")));
        string title    = Text::fromT(dll.Get(MediaInfoLib::Stream_Audio, i, _T("Title")));
        output += Util::toString(i + 1) + ". " + title + " [" + lang + "][" + format + "] " + bitrate + "\n";
    }
    dll.Close();
    return output;
}
catch(Exception&){}

dll.Close();
throw FileException("MediaInfoLib: parse error");

} ну в общем прочую мелочь можно посмотреть в патче: issue899 .patch ( https://docs.google.com/file/d/0B0-ygoNBOTDcVTZBVms2cmo1WG8/edit?usp=sharing )

обработаны не все исключительные ситуации, поэтому там еще дописывать. Также например: полученная инфа, нигде не храниться, поэтому при новом запрашивании будут снова получены 250кб.

жаль конечно, что клиентами реализуются минислоты по размеру файла: free = free || (sz <= (int64_t)(SETTING(SET_MINISLOT_SIZE) * 1024)); а не по размеру запрашиваемого: $ADCGET file TTH/M4SJQNWUASPXVGI7L.... 0 256000

Было бы очень кстати, а так приходиться бороться с занятыми слотами.... :(

Кстати о размере: Лучше конечно будет реализовать просмотр содержимого во время получения, и как только были получены все заголовки, то можно производить финализацию процесса. В целом повреждений не было и при 60кб для различных контейнеров, но оставил 250. Не успел разыскать информацию по структуре заголовков и их длине.

Ну в общем способ универсален, работает в независимости какой клиент у другого пользователя. так что надеюсь на какую-нибудь реализацию в RC сборке

Attachment: f1.png f2.png f3.png