CHUNGYUN / flylinkdc

Automatically exported from code.google.com/p/flylinkdc
0 stars 0 forks source link

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

Closed GoogleCodeExporter closed 9 years ago

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

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

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

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

Original issue reported on code.google.com by entry....@gmail.com on 23 Jan 2013 at 3:39

Attachments:

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

Original comment by entry....@gmail.com on 23 Jan 2013 at 3:43

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

Original comment by tret2...@gmail.com on 24 Jan 2013 at 7:46

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

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

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

Original comment by entry....@gmail.com on 24 Jan 2013 at 9:47

GoogleCodeExporter commented 9 years ago
[deleted comment]
GoogleCodeExporter commented 9 years ago
Эта информация получена через mediainfo
вы пробовали ей скармиливать не полный 
файл а обрубок в первые 300-500к?

Original comment by Pavel.Pimenov@gmail.com on 24 Jan 2013 at 9:55

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

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

Original comment by entry....@gmail.com on 24 Jan 2013 at 10:08

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

Original comment by entry....@gmail.com on 24 Jan 2013 at 10:16

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

будет поддерживаться во флаях и всех его 
клонах.

Original comment by Pavel.Pimenov@gmail.com on 24 Jan 2013 at 10:22

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

Original comment by Pavel.Pimenov@gmail.com on 24 Jan 2013 at 10:24

GoogleCodeExporter commented 9 years ago
скопировал сюда: 
https://docs.google.com/file/d/0B0-ygoNBOTDcOE92QVVwSWdhTW8/edit

Собственно из того что требуется, нужно по 
большей части только название и тип всех 
дорожек, что там имеется. На основании 
типов контейнеров, можно вообще самому 
рассчитать offset и далее просто вытащить 
необходимые данные. ну по крайней мере с mkv 
дела обстоят проще.

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

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

Original comment by entry....@gmail.com on 24 Jan 2013 at 10:40

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

нужно то:
* Скачать первые ~500кб
* Прогнать через mkvmerge
* Показать найденные дорожки

Original comment by entry....@gmail.com on 24 Jan 2013 at 10:46

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

Original comment by Pavel.Pimenov@gmail.com on 24 Jan 2013 at 10:54

GoogleCodeExporter commented 9 years ago
ок, спасибо за проявленный интерес

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

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

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

Original comment by entry....@gmail.com on 24 Jan 2013 at 11:11

GoogleCodeExporter commented 9 years ago
э ну вот, обновлялся чтобы проверить mediainfo, 
теперь в новой версии база имеет 
эксклюзивную блокировку от FlylinkDC.exe
Теперь до статистики так просто не 
достучаться :( https://bitbucket.org/3F/flydcstat/wiki/Home

Хотя конечно exclusive lock flylink'у конечно только 
на пользу... все же плагины были бы кстати

Original comment by entry....@gmail.com on 24 Jan 2013 at 11:22

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

Original comment by Pavel.Pimenov@gmail.com on 24 Jan 2013 at 11:25

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

т.к. пользователь не отослал полный дамп 
файла - мы не знаем на каком файле упала
и не можем сообщить о пробелме автору либы

Original comment by Pavel.Pimenov@gmail.com on 24 Jan 2013 at 11:56

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

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

Original comment by a.rain...@gmail.com on 25 Jan 2013 at 3:38

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

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

Original comment by entry....@gmail.com on 26 Jan 2013 at 10:40

GoogleCodeExporter commented 9 years ago
[deleted comment]
GoogleCodeExporter commented 9 years ago
Встроенная медиаинфа и так уже показывает 
всё, что только возможно по множеству 
контейнеров. И качать ничего не надо, вся 
инфа по дорогам, включая язык вообще 
передаётся с файлистом.

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

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

Original comment by bobrikov on 27 Jan 2013 at 1:19

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

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

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

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

Original comment by entry....@gmail.com on 27 Jan 2013 at 1:57

Attachments:

GoogleCodeExporter commented 9 years ago
[deleted comment]
GoogleCodeExporter commented 9 years ago
или вот еще пример,

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

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

Original comment by entry....@gmail.com on 27 Jan 2013 at 2:21

Attachments:

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

Original comment by Pavel.Pimenov@gmail.com on 27 Jan 2013 at 2:23

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

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

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

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

Original comment by entry....@gmail.com on 27 Jan 2013 at 2:43

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

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

Original comment by Pavel.Pimenov@gmail.com on 27 Jan 2013 at 3:03

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

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

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

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

Original comment by bobrikov on 27 Jan 2013 at 3:10

GoogleCodeExporter commented 9 years ago
***
Stream size                              : 308 MiB (6%)
Title                                    : R5
Language                                 : Russian
***

Original comment by A.Kuda...@gmail.com on 27 Jan 2013 at 3:10

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

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

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

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

Original comment by entry....@gmail.com on 27 Jan 2013 at 3:24

GoogleCodeExporter commented 9 years ago
это я с браузера жены нечаянно.

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

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

Original comment by bobrikov on 27 Jan 2013 at 3:30

Attachments:

GoogleCodeExporter commented 9 years ago
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"
не нахожу

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

Original comment by entry....@gmail.com on 27 Jan 2013 at 3:53

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

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

Original comment by bobrikov on 27 Jan 2013 at 4:03

GoogleCodeExporter commented 9 years ago
bobrikov:
> такое же окно вы будете получать кликнув 
на кино. будете :)
еще не скачанное или не инициированное на 
скачивание ? тогда о чем мы тут с вами 
говорим :)

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

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

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

Original comment by entry....@gmail.com on 27 Jan 2013 at 4:36

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

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

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

Original comment by bobrikov on 27 Jan 2013 at 5:22

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

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

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

Original comment by entry....@gmail.com on 27 Jan 2013 at 5:33

GoogleCodeExporter commented 9 years ago
и это пилим. тоже усердно :)

Original comment by bobrikov on 27 Jan 2013 at 5:54

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

* https://docs.google.com/file/d/0B0-ygoNBOTDcamM0MW5aYjhhTGM/edit?usp=sharing
* https://docs.google.com/file/d/0B0-ygoNBOTDcdHJrbDFGNFo0VDQ/edit?usp=sharing
* https://docs.google.com/file/d/0B0-ygoNBOTDcdF9WUllvYXN4SmM/edit?usp=sharing

Как ни крути, настроенная среда дает 
половину выполненного дела <_< 
т.к. нет лицензии на про, начал мучить express 
версию.

В конечном итоге выяснилось, что 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 сборке

Original comment by entry....@gmail.com on 17 Feb 2013 at 10:39

Attachments: