воскресенье, 9 января 2011 г.

Характеристики медиа-файлов в файл-листах

Привет.

В результате анализа жалоб на неверное определение битрейта mp3 файлов была опробована
внешняя библиотека mediainfo которая позволяет получить большую информацию о разных файлах и не дает ошибок на присланных файлах в формате mp3.

Предлагаемые изменения в структуре файл-листа.
1. Отображается битрейт звука на всех айдио и видео файлах.
2. Отображается размер Ширина x Высота на фалах видео и изображений(фотки).




Желающие могут попробовать тестовую сборку
FlylinkDC-r500-mediainfo-test-1.rar

и высказать замечания...(тест лучше делать в отдельном каталоге)
Мне пока не понравилось несколько моментов
1. тормознутость либы на avi. (она для определения размеров видео зачем-то читает все кино :))
2. неверное определения битрейта если в кино две дорожки.
3. может размер фотографий лишнее и его можно выкинуть :)
4. упало при ночном нагрузочном тесте хеширвания всего винта


технически полученные данные сохраняются в таблице fly_file в двух новых колонках в момент хеширования. и в последующем отдаются клиентам в тэге WH XML документа.

Т.к. я mediainfo ковыряю всего один день.. возможно что-то не так сделал.
ниже сырой исходный код получения данных параметров буду благодарен если что-то подскажите.
p.s.
через некоторое время исходники вкомичу в бранч
http://flylinkdc.googlecode.com/svn/branches-dev/ppa/r5xx-mediainfo-integration
после успешных тестов волью в основной ствол разработки.


void HashManager::getMediaInfo(const string& p_name, uint16_t& p_bitrate,uint16_t& p_mediaX, uint16_t& p_mediaY)
{
/*
TODO
1 - оптимизнуть и не открывать левые расширения
2 - исключить удвоение битрейта (вероятно когда две или более аудио дорожки) возвращается число 320000320000
3 -
*/
static MediaInfoDLL::MediaInfo m_media_info_dll; //[+]PPA
p_bitrate = 0;
p_mediaX = 0;
p_mediaY = 0;
if(!m_media_info_dll.IsReady())
return;
try
{
string l_sinfo = Text::fromT( m_media_info_dll.Option(_T("Info_Version"), _T("")).c_str());
m_media_info_dll.Option(_T("Internet"), _T("No"));
if(m_media_info_dll.Open(Text::toT(p_name)) )
{
const TCHAR* l_MediaInfoQuery = _T("Inform");
m_media_info_dll.Option(l_MediaInfoQuery, _T("Audio;%BitRate%"));
l_sinfo = Text::fromT(m_media_info_dll.Inform());
p_bitrate = atoi(l_sinfo.c_str())/1000;
m_media_info_dll.Option(l_MediaInfoQuery, _T("Image;%Width%x%Height%"));
l_sinfo = Text::fromT(m_media_info_dll.Inform());
if(!l_sinfo.empty())
{
string::size_type l_pos = l_sinfo.find('x');
if(l_pos != string::npos)
{
p_mediaX = atoi(l_sinfo.c_str());
p_mediaY = atoi(l_sinfo.c_str() + l_pos + 1);
}
}
else
{
m_media_info_dll.Option(l_MediaInfoQuery, _T("Video;%Width%x%Height%"));
l_sinfo = Text::fromT(m_media_info_dll.Inform());
if(!l_sinfo.empty())
{
string::size_type l_pos = l_sinfo.find('x');
if(l_pos != string::npos)
{
p_mediaX = atoi(l_sinfo.c_str());
p_mediaY = atoi(l_sinfo.c_str() + l_pos + 1);
}
}
m_media_info_dll.Close();
}
}

22 комментария:

Dir3kToR комментирует...

Ну и длительность добавляйте, чо уж там мелочится.

Unknown комментирует...

Интересно, но для видео-файлов только битрейт имеет мало смысла. Гораздо большее значение, ИМХО, имеет колличество каналов и кодек. Для mp3- да, очень полезно и удобно.

Анонимный комментирует...

Что-то на Вин7х64 у меня ничего не показывает, для Авишек есть колонки "качество" и "WxH" но инфы в них никакой нет - пустые, для mp3 и колонок таких нет. Тестовый ехе-шник для какой системы? х86 или х64?

Анонимный комментирует...

просьба сделать данную сборочку на x64

Pavel Pimenov комментирует...

А вы поставили программу в отдельный каталог?
выполнили рехэш всей своей шары?
и открыли свой список файлов?
т.к. в чужом списке файлов этих данных нет.

p.s.

на x64 можно запустить и этот модуль.
он будет работать

Анонимный комментирует...

Было бы неплохо, если бы отображались данные о звуковых дорожках в видео(ENG,RUS,ITA). Если не ошибаюсь, библиотека это поддерживает.

Анонимный комментирует...

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

Анонимный комментирует...

Было бы неплохо, если бы отображались данные о звуковых дорожках в видео(ENG,RUS,ITA), а так же поле CODEC в БД добавить.

Pavel Pimenov комментирует...

Запрос на расширенную инфу как у грея прикуртим позже.

Pavel Pimenov комментирует...

у кого-то это заработало? :)
заметно тормознее стало?

Анонимный комментирует...

А вы поставили программу в отдельный каталог?
выполнили рехэш всей своей шары?
и открыли свой список файлов?
т.к. в чужом списке файлов этих данных нет.

Ничесе условия! конечно не делал всего этого т.к. не было даже намека на это в новости. Вобще жесть. Рехэш всей своей шары... А зачем? Чтоб знать характеристики соих файлов? Мне интересно было бы знать эти характеристики у пользователей, а не у себя. мм, сомнительно, нужно ли...

Tirael комментирует...

Ничесе условия! конечно не делал всего этого т.к. не было даже намека на это в новости. Вобще жесть. Рехэш всей своей шары... А зачем?

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

Pavel Pimenov комментирует...

Внимание!
Я не волшебник :)
Данной версией вы не сможете узнать характеристики файлов расшаренные в версиях DC++ отличных от этой.

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

Анонимный комментирует...

Запрос на расширенную инфу как у грея прикуртим позже.

да вы всё время всё нужное откладываете. Поиск неполных источников тоже отложили... где-то года два назад его просили сделать.
DCLS тоже отложено.

Анонимный комментирует...

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

Анонимный комментирует...

Медиа важно, но не так, как поиск неполных источников и дклс.
Неполные источники - это единственная информация о статусе раздачи!
Про dcls написал для вас статью http://code.google.com/p/flylinkdc/issues/detail?id=286&start=100

Анонимный комментирует...

Насчёт файлообмена, ещё есть 2 предложения, важнее медиаинфо.
1 - оесделать приоритеты по файлам
2 - сделать посегментную раскидку файла разным пользователям. Про это уже писал подробно здесь, в блоге. Потом в Issue напишу. Из-за этой фишки до сих пор существует релиз группа электричка. Это реальный метод борьбы с правоoблaдателями - а значит вообще хорошая защита для DC вцелом.

Tirael комментирует...

Pavel Pimenov пишет...
у кого-то это заработало? :)
заметно тормознее стало?


Радикального увеличения нагрузки на ЦП не заметил,пол крайней мере весь комп не висит.

Андрей пишет...
Интересно, но для видео-файлов только битрейт имеет мало смысла. Гораздо большее значение, ИМХО, имеет количество каналов и кодек. Для mp3- да, очень полезно и удобно.


Согласен может для снижения нагрузки отключить определение битрейта видео и прикрутить определение кодека?

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

Pavel Pimenov комментирует...

MediaInfo.dll весит 2.9 метра.
сжимается до 700к

Анонимный комментирует...

Сейчас самое важное - зарелизить r500. Притормозите со своими наворотами уже.

Анонимный комментирует...

Ничесе условия! конечно не делал всего этого т.к. не было даже намека на это в новости. Вобще жесть. Рехэш всей своей шары... А зачем? Чтоб знать характеристики соих файлов? Мне интересно было бы знать эти характеристики у пользователей, а не у себя. мм, сомнительно, нужно ли...

более идиотского раздвоения личности давно не видел.

Mohn комментирует...

Вы уверены, что стоит это делать?
Лучше бы оптимизировали код, чтобы программа меньше кушала и быстрее хешировала ;)
многие пользователи жалуются на это, особенно у кого старые компьютеры.