Привет.
В результате анализа жалоб на неверное определение битрейта 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();
}
}
Подписаться на:
Комментарии к сообщению (Atom)
22 комментария:
Ну и длительность добавляйте, чо уж там мелочится.
Интересно, но для видео-файлов только битрейт имеет мало смысла. Гораздо большее значение, ИМХО, имеет колличество каналов и кодек. Для mp3- да, очень полезно и удобно.
Что-то на Вин7х64 у меня ничего не показывает, для Авишек есть колонки "качество" и "WxH" но инфы в них никакой нет - пустые, для mp3 и колонок таких нет. Тестовый ехе-шник для какой системы? х86 или х64?
просьба сделать данную сборочку на x64
А вы поставили программу в отдельный каталог?
выполнили рехэш всей своей шары?
и открыли свой список файлов?
т.к. в чужом списке файлов этих данных нет.
p.s.
на x64 можно запустить и этот модуль.
он будет работать
Было бы неплохо, если бы отображались данные о звуковых дорожках в видео(ENG,RUS,ITA). Если не ошибаюсь, библиотека это поддерживает.
Если взялись, доделайте до конца, чтобы как в грейлинке каждый у каждого мог посмотреть характеристики файлов шаре.
Было бы неплохо, если бы отображались данные о звуковых дорожках в видео(ENG,RUS,ITA), а так же поле CODEC в БД добавить.
Запрос на расширенную инфу как у грея прикуртим позже.
у кого-то это заработало? :)
заметно тормознее стало?
А вы поставили программу в отдельный каталог?
выполнили рехэш всей своей шары?
и открыли свой список файлов?
т.к. в чужом списке файлов этих данных нет.
Ничесе условия! конечно не делал всего этого т.к. не было даже намека на это в новости. Вобще жесть. Рехэш всей своей шары... А зачем? Чтоб знать характеристики соих файлов? Мне интересно было бы знать эти характеристики у пользователей, а не у себя. мм, сомнительно, нужно ли...
Ничесе условия! конечно не делал всего этого т.к. не было даже намека на это в новости. Вобще жесть. Рехэш всей своей шары... А зачем?
Вообще то в шапке указано, что желательно ставить в отдельный каталог т.к. это экспериментальная версия. Завтра попробую, сегодня времени нет.
Внимание!
Я не волшебник :)
Данной версией вы не сможете узнать характеристики файлов расшаренные в версиях DC++ отличных от этой.
если все получится то вы будете видеть характеристики только у клиентов, которые установили у себя новые версии клиента и отдают эту информацию в соответствующих тэгах файл-листа.
Запрос на расширенную инфу как у грея прикуртим позже.
да вы всё время всё нужное откладываете. Поиск неполных источников тоже отложили... где-то года два назад его просили сделать.
DCLS тоже отложено.
Больше всего сейчас нужны неполные источники и автобан. Сделайте это в первую очередь, а медиаинфо оставьте не потом. Чёто за всё подряд хватаетесь и ничего не делаете...
Медиа важно, но не так, как поиск неполных источников и дклс.
Неполные источники - это единственная информация о статусе раздачи!
Про dcls написал для вас статью http://code.google.com/p/flylinkdc/issues/detail?id=286&start=100
Насчёт файлообмена, ещё есть 2 предложения, важнее медиаинфо.
1 - оесделать приоритеты по файлам
2 - сделать посегментную раскидку файла разным пользователям. Про это уже писал подробно здесь, в блоге. Потом в Issue напишу. Из-за этой фишки до сих пор существует релиз группа электричка. Это реальный метод борьбы с правоoблaдателями - а значит вообще хорошая защита для DC вцелом.
Pavel Pimenov пишет...
у кого-то это заработало? :)
заметно тормознее стало?
Радикального увеличения нагрузки на ЦП не заметил,пол крайней мере весь комп не висит.
Андрей пишет...
Интересно, но для видео-файлов только битрейт имеет мало смысла. Гораздо большее значение, ИМХО, имеет количество каналов и кодек. Для mp3- да, очень полезно и удобно.
Согласен может для снижения нагрузки отключить определение битрейта видео и прикрутить определение кодека?
В общем удобно, даже размер картинок может пригодиться, только вот вопрос насколько из-за этой либы увеличится размер инсталлера? Мне без разницы, но некоторым людям уже не нравятся нынешние размеры инсталлеров.
MediaInfo.dll весит 2.9 метра.
сжимается до 700к
Сейчас самое важное - зарелизить r500. Притормозите со своими наворотами уже.
Ничесе условия! конечно не делал всего этого т.к. не было даже намека на это в новости. Вобще жесть. Рехэш всей своей шары... А зачем? Чтоб знать характеристики соих файлов? Мне интересно было бы знать эти характеристики у пользователей, а не у себя. мм, сомнительно, нужно ли...
более идиотского раздвоения личности давно не видел.
Вы уверены, что стоит это делать?
Лучше бы оптимизировали код, чтобы программа меньше кушала и быстрее хешировала ;)
многие пользователи жалуются на это, особенно у кого старые компьютеры.
Отправить комментарий