четверг, 25 февраля 2016 г.

Настройки сжатия H.264/AVC в PlayClaw

Настройки для различных кодеров H.264/AVC в принципе похожи друг на друга (AMD, Intel, NVidia). Есть различия только в наборе предустановок и способов контроля битрейта.


В предустановке выбираем набор уже готовых параметров сжатия. В NVidia он сильно расширен и можно понять о предназначении каждого набора исходя из названия. Но для среднестатистического пользователя можно оставить NVDefault. Этот вариант вполне быстр и качественен.

Управление битрейтом

В группе управления битрейтом необходимо выбрать способ контроля кодером битрейта. Для всех кодеров есть стандартные CBR (постоянный битрейт) и VBR (переменный битрейт), а так же свои собственные варианты.

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

Переменный битрейт может контролироваться параметром квантования (QP - Quantization Parameter) или, другими словами, параметров качества. Чем ниже (0 - минимально) этот параметр, тем выше качество. Чем выше (51 - максимум), тем выше степень сжатия.
Например, у NVidia есть способ контроля VBR/QP, где можно задать минимальный и максимальный параметр. В этом случае кодер будет стараться "уложить" качество сжатия в заданные пределы, по возможности увеличивая реальный параметр (снижая размер данных), если кадр это позволяет.

У всех кодеров есть так же вариант контроля CQP (постоянный QP), где минимальная и максимальная границы одинаковы (и называются "качеством" в настройках). Этот вариант можно считать самым быстрым VBR для кодера, потому что ему не надо подбирать качество - оно уже жестко задано.

Управление цепочкой кадров

Поток кадров H.264/AVC состоит из трех видов кадров - ключевых (I-frame) и обычных (P-frame, B-frame). I-frame сжимается самостоятельно (по типу MJPEG), P-frame сжимается с учетом предыдущего I или P фрейма. B-frame создается с учетом предыдущего и последующего I или P фрейма.
Настройкой интервала ключевых кадров вы задаете как часто кодер вставляет I-frame. Чем более динамичная сцена, тем больше должно быть ключевых кадров. Некоторые сервисы трансляции задают рекомендуемые параметры и интервал ключевых кадров в том числе.

Интервал P-фреймов задает размер цепочки B-фреймов, которые помещаются между двумя последовательными P-фреймами. То есть, если интервал равен 1 (единица), то B-фреймы вообще отключаются. Если интервал равен 2, то между P-фреймами будет вставляться один B-фрейм.
Чем больше интервал P-фреймов, тем больше нагрузка на кодер и декодер.

Понятие группа кадров (GoP - Group of Pictures) - это кадры между двумя ключевыми кадрами (плюс первый кадр, ключевой). При создании P и B кадров кодер может использовать кадры за пределами группы кодируемого кадра. В этом случае группа называется открытой. Степень сжатия здесь повышается.
Сервисы трансляции могут потребовать закрытую группу. Для этого есть специальная опция в настройках.

Опция постоянного фреймрейта (CFR) дает возможность избежать потенциальной рассинхронизации видео и звука в некоторых редакторах (типа Adobe Premier). Если по какой-либо причине пропускается кадр, PlayClaw постарается имитировать его дубликатом предыдущего кадра.

Дополнительные настройки

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

четверг, 18 марта 2010 г.

Fraps был взвешен, измерен и признан негодным ;)

Совсем недавно вышла новая версия нашего основного конкурента Fraps, которая позволяет снимать видео без синхронизации с игровым FPS. Не прошло и 100 лет ;) И уж совсем на днях вышла версия с некой оптимизацией под Battlefield Bad Company 2. Настало время все это дело проверить ;)

Испытания велись на Win7 x64 с последними апдейтами, на конфигурации Intel Core i5-750 / AMD Radeon 5750 / 2x2Gb DDR3 / 500Gb HDD (не системный) / 1920x1080 FullHD.

В PlayClaw выставлялся режим слабого сжатия, потому что он очень близок и похож на сжатие фрапса. FPS для видео выставлялся в 30.

FPS без записи = 127


Полный кадр
Fraps


PlayClaw


Как видно из скриншотов, Fraps снижает игровой fps до 60 со 127, PlayClaw - до 90 со 127.

Половинчатый кадр
Fraps

Это и смешно, и странно для меня, но показания фрапса практически не изменились - те же 60fps.

PlayClaw


Результаты для PlayClaw ожидаемые (увеличение игрового fps до 100), а вот что с фрапсом творится - непонятно.

Ну и в качестве эксперимента, оставляет для PlayClaw в настройках одно ядро для сжатия и попробуем записать полнокадровое видео.


А вот тут удивляет PlayClaw ;) Судя по всему, мощностей одного ядра процессора хватает на то, чтобы кодировать FullHD видео с fps 30 - игровой fps подрос до 99 за счет освобождения одного ядра. А заодно это означает, что 2 ядра игре все же маловато будет :)

Результаты

Итак, проведенные тесты показали, что не все хорошо в государстве фрапсовом. PlayClaw его уделывает почти на 50% (99fps против 60). Пользуйтесь на здоровье - лучшая программа для записи игрового видео! :)

вторник, 16 марта 2010 г.

Как работают читы для 3д шутеров

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

Сам я столкнулся с читами давно, играя по сетке в Counter Strike. Одновременно я работал в компании RevoltGames Multimedia ведущим программистом проекта Neuro. И даже однажды для эксперимента по-быстрому накидал простенький чит для CS, позволяющий видеть сквозь стены (Wallhack / Волхак).

Сразу оговорюсь - нижеописанное является верным для сетевых 3Д шутеров, построенных на системе Клиент-Сервер и клиенты которых работают под управлением Windows.

Принцип работы читов
Основная идея системы Клиент-Сервер заключается в том, что все действия обсчитываются на сервере (выстрелы, взрывы, попадания, расход боеприпасов, здоровья и прочее), а клиенту отдается только необходимая ему информация (положение игроков, различные события и состояния).

Так как (в идеале) игроки не имеют доступа к серверным файлам, то и программы-читы так же не могут повлиять на работу сервера. Остается оперирование данными, доступными клиенту. Вдаваться в подробности взлома и реверса кода клиента я не буду - это в данном случае никому не нужно. Просто скажу, что 99% читов имеют немного общего в принципах работы со значительно более полезной для честных игроков программой для захвата видео - PlayClaw.

Общее заключается в том, что они перехватывают методы отрисовки кадра и уже потом рендерят поверх кадра игры всю необходимую информацию (Overlays / Оверлеи). Собственно, из-за этого некоторые "продвинутые" системы защиты могут определять безобидные программы как потенциально опасные (например Hackshield Pro для шутера Combat Arms довольно туполоб в этом отношении).

Основные виды читов (их возможности)
100% клиентов сетевых 3д шутеров имеют доступ к положению игроков, которых видит наш игрок или потенциально может видеть. Потенциально видимый игрок может находиться за стеной или вообще невидим, но он находится рядом с нашим игроком. Чит отрисует всех видимых и потенциально видимых игроков (а так же возможно и предметы, и прочие полезные вещи) поверх кадра игры. Иногда для этого применяют выделение по цвету, чтобы даже полный дятел смог заметить врага. Такой вид читов называют Wallhack (видимость через стены). Это один из классических и распространенных видов читов.


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

Дополнительными ("мелкими") видами читов являются специфические для каждой игры возможности (радары, которые показывают все, индикаторы здоровья, оружия и проч.). Есть кое-что общее, например - No-Fog (отключение "тумана войны"), позволяющий игроку видеть максимально далеко. Тут никаких ухищрений программе-читу делать не надо, просто отключается небольшой кусочек рендера игры и все. Иногда для удобства читера отключают рендер фона, как результат - черное небо и контрастные игроки на этом фоне.


Как распознать читера?
В общем случае это сделать довольно сложно. А если читер умный и использует платные (или еще хуже - приватные) читы, то это практически нереально. Под словом "распознать" я понимаю определение игрока, который использует читы с вероятностью, близкой к 100%. Значительно хуже будет заклеймить честного игрока, чем не доказать виновность читера. Начнем по порядку.

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

Punkbuster может выкинуть из игры и за безобидные программы (обычно эти программы просто недавно появились и еще неизвестны разработчикам античита). Если он обнаруживает чит, то идет бан (насколько серьезные бан, зависит от игры).

Valve Anti-Cheat не кикает игроков, а только банит в случае 100% обнаружения чита. Причем делает она это с задержкой от нескольких дней до нескольких недель. Говорят, это сделано специально для того, чтобы читер не смог понять, где он спалился.

С Hackshield Pro я знаком немного - в процессе "борьбы" за выживание PlayClaw в игре Combat Arms эта защита попила нехилое количество крови у меня. В результате PlayClaw то работает, то нет с этой игрой, но зато читеры там просто в масле катаются :) За пару-тройку часов игры в CA я их несколько штук успел увидеть.

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

Wallhack в руках грамотного читера распознать невозможно. Если же им пользуется дятел, то по записи в демке игры или по kill-cam (если игра это позволяет), можно заметить, как он ведет стволом за игроком, находящимся за стенкой или за углом и который должен сейчас выйти на читера. В самой игре это поймать довольно сложно - нужно учитывать специфику игры. Например, если вы уверены железно на 100%, что выруливаете из-за угла незамеченным и неслышимым и видите ствол, направленный в нос (или уже летящие снаряды, ракеты) и так повторяется несколько раз с одним и тем же игроком - это повод задуматься.

Aimbot распознается значительно проще, но одновременно вероятность ошибки тут велика. Если исходить из описания чита, то все очень просто - получаете постоянные хедшоты в любых положениях от одного и того же игрока - подозрительно. Этот игрок кладет по несколько противников за очередь - еще подозрительней. Но и профессионал может так же делать, не так ли? Тут оценка чисто субъективная. С очень высокой (практически 100%) вероятностью аимбот определяется, если посмотреть на демке за игроком или побегать за ним (в его же команде) - довольно часто неопытные читеры (или чит-программа не идеальна) палятся на том, что жмут на кнопку, аимбот срабатывает и наводит прицел, игрок стреляет и убивает и аимбот автоматически захватывает другую цель, которая может быть даже сзади игрока! Вот такие резкие "скАчки по головам" есть 100% аимбот.

Из дополнений, тот же NoFog можно определить, когда вам прилетает с другого конца карты :) Обычно такое используется совместно с аимботом.

Что читом не является
...естественно, при условии корректно написанного сервера и его прямой недоступности клиенту.

Читам не являются "бесконечное" здоровье, "бесконечные" боеприпасы, "вертлявость" или вообще Neo-Matrix-подобность, умение убивать всех сразу, умение проходить сквозь стены (тут бывают косяки игр, это не чит, это glitch) и прочая подобная бодяга. ВСЕ это обрабатывается на сервере и клиент не имеет возможности менять эти параметры или влиять на действия других игроков.

Просто запомните - клиент отсылает серверу информацию о нажатых кнопках и движениях мыши (контроллеров) и принимает координаты объектов и их свойства. И ЭТО ВСЕ.

Вот, постарался популярно объяснить, что это такое и с чем это есть. Можно было бы написать еще раза в 3 больше, но это уж слишком "многа букафф" :)

суббота, 20 февраля 2010 г.

Интересный опыт с Ventrilo и Battlefield Bad Company 2

Вчера с целью расслабиться и в очередной раз протестировать работу PlayClaw, запускаю Battlefield Bad Company 2, захожу на наш сервер Ventrilo, вижу, что камрады вроде бы играют.

Замечательно! И вот тут я впервые столкнулся с интересной проблемой - когда активно окно клиента вентрилы, разговаривать могу, меня все слышат и я всех слышу. Однако, стоит мне переключиться в окно игры - все, я слышу разговоры, PlayClaw показывает оверлеи от вентрилы, однако сам я ничего говорить не могу - вот не ловит клиент вентрилы нажатие кнопки и все тут :)

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

Я запускаю BFBC2 под админом, чтобы видеть пинги до серверов, а клиент вентрилы - как обычно. Оказалось, что в этом случае вентрила не "видит" нажатия кнопок и я становлюсь "немым". Запуск клиента вентрилы под админом решил все проблемы. Это было в Windows 7 x64.

Век живи, век учись :)

Ура, первый пост :)

Приветствую заранее всех потенциальных читателей :)
В твиттере немного чего напишешь, форум вообще для другого. Здесь буду писать об интересностях, связанных с записью игрового видео, с работой программы PlayClaw (и не только) и вообще обо всем рядом стоящем :)