Весна 2020 года стала, в числе прочего, ещё и сезоном видеостримов. Многие гости и ведущие лишились возможности приходить в студии и стали вести трансляции прямо из дома.

Мне стало завидно от того, что все стримят, а я нет, но просто так стримить было не интересно. Поэтому, я взял лежащие в запасе сюжеты по истории техники и провёл по одному стриму в разных соцсетях (Facebook, Вконтакте, Одноклассники, Instagram). Стримы были не тестовые «по паре секунд», а полномасштабные — 30-60 минут. Тестировались разные технические и организационные моменты, в том числе — выкачивание видеозаписи к себе на компьютер.

Результатом данного исследования должен был стать ответ на вопрос «на какой площадке стримить?».

Дальше пойдёт анализ полученных данных и выводы. (Осторожно: много букв, цифр и скриншотов ).


Тест стриминга в 4 соцсетях и выбор лучшего варианта

Использованное оборудование


Все эти годы я снимал на «что есть под рукой», а если чего не было — докупалось что-нибудь хорошее, но без фанатизма.

Использованное в данном исследовании оборудование уместилось на данной фотографии


Использованное в данном исследовании оборудование уместилось на данной фотографии

0) Стол за которым проводилось исследование.

1) Ноутбук с наушниками для проверки наличия звука в трансляции идущей в браузере. Ну и для последующего монтажа для Youtube, выкачивания файлов, анализа и написания данного отчёта.

2) Диктофон Tascam DR-05 с мохнаткой, штативом и батарейкой. После того как в прошлом диктофоне протекли забытые батарейки, я стараюсь использовать технику умеющую работать от пауэрбанков. То что данная модель диктофона подключается по MINI-USB меня даже радует своей винтажностью и ламповой теплотой.

3) Распечатанный логотип канала. По идее его стоило повесить на фотофон, но листок А4 оказался слишком маленьким, а большего принтера у меня нет. Но раз в стримы он не попал, то пусть хоть тут поучаствует.

4) Штатив для большой камеры. Хлипкий. Дешёвый. Уже поломался. Но для съёмок в домашних условиях вполне годен.

5) Китайский диодный фонарик ставящийся на башмак камере. Имеет два светофильтра (белый и оранжевый), регулировку яркости (в одном из видео я это делал прямо во время стрима). Питается как от элементов питания AA, так и от пауэрбанка через micro-USB.

6) Сама камера Lumix FZ82.

7) Смартфон Redmi 5 Plus который стримил через wi-fi своей фронтальной камерой и микрофоном. Пауэрбанк подстраховывающий его во время стрима.

8) Компьютерная мышка. (идёт отдельно от п.1 потому, что на данной фотографии у неё особенная работа — она закрывает потёртость на столе)

Возникает очевидный вопрос:
Если стрим шёл через фронтальную камеру и микрофон смартфона, то зачем там Tascam и Lumix?

Ответ прост:
Я потратил кучу времени на подготовку к стриму — изучал тему, читал книжки, копался в архивах. Фиг его знает чем обернуться эти экспериментами со стримами, поэтому — пусть у меня будет качественная картинка с качественным звуком.

Как следствие, для каждого стрима в соцсетях у меня есть версия на Youtube, в хорошем качестве и с подмонтированными иллюстрациями (показывать книжки в камеру смартфона оказалось плохим вариантом).

Исходное качество видеосъёмки фронтальной камерой смартфона Redmi 5 Plus


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

В настройках фронтальной камеры у меня указан режим видеозаписи 1920x1080, 30fps, но есть ньюанс — в темноте fps падают.

Этот момент важно отметить, чтобы сравнить качество стримов с простой видеозаписью.

Пример записи днём в светлом помещении


Пример записи днём в светлом помещении
Пример записи на смартфон залитый на Youtube — Первая бензопила Stihl в музее

Данные ffmpeg про исходные файлы

Для вступления (снималось на улице)
Duration: 00:00:49.94, start: 0.000000, bitrate: 20116 kb/s
Stream #0:0(eng): Video: h264 (Baseline) (avc1 / 0x31637661), yuvj420p(pc, smpte170m), 1920x1080, 19955 kb/s, SAR 1:1 DAR 16:9, 29.99 fps, 30 tbr, 90k tbn, 180k tbc (default)

Для основного файла (снималось в светлом помещении)
Duration: 00:11:22.40, start: 0.000000, bitrate: 20098 kb/s
Stream #0:0(eng): Video: h264 (Baseline) (avc1 / 0x31637661), yuvj420p(pc, smpte170m), 1920x1080, 19998 kb/s, SAR 1:1 DAR 16:9, 27.11 fps, 30 tbr, 90k tbn, 180k tbc (default)

То есть, fps падает даже просто при переходе с улицы в достаточно светлое помещение

Пример записи в тех же условиях что проходил стримами


Пример записи в тех же условиях что проходил стримами
Пример записи на смартфон залитый на Youtube — Что предсказал Жюль Верн — полёты в космос

Данные ffmpeg для исходного файла
Duration: 00:23:08.00, start: 0.000000, bitrate: 20097 kb/s
Stream #0:0(eng): Video: h264 (Baseline) (avc1 / 0x31637661), yuvj420p(pc, smpte170m), 1920x1080, 19996 kb/s, SAR 1:1 DAR 16:9, 19.97 fps, 59.94 tbr, 90k tbn, 180k tbc (default)

(вообще, там два файла — смартфон бьёт длинные записи)

Таким образом установлено, что запись на фронтальную камеру смартфона, в тех же условиях в которых проходили стримы, позволяет получить качество видео 1920x1080, 20 fps, bitrate: 20097 kb/s.

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

Возникает закономерный вопрос: если фронтальная камера так плоха, то почему не использовать основную?

Причин тут две.

1) Я хочу видеть что попадает в кадр. В домашних условиях это не так важно, а при стриме/съёмках в музее — необходимо.

2) Я хочу видеть что процесс записи идёт. Видеть сам факт ведения записи. В данном случае есть разница между записью на основную камеру смартфона и записью на большую камеру. Да, я не вижу идёт запись на большой камере или нет, но если Lumix отключится из-за разряда батареи, то он сделает две вещи: с жужжанием уберёт объектив и пропикает. По этим звукам я пойму что запись прекратилась.

Кстати, именно такой момент произошёл во время записи стрима на Одноклассниках. В версии записанной большой камерой и выложенной на Youtube видно как я выключаю трансляцию на смартфоне и это случайно совпадает с самовыключением Lumix. Картинка выключается и раздаётся писк (звук писался на диктофон). Я специально оставил этот момент в финальном монтаже, чтобы использовать как пример. Кстати, этот пример показывает не только плюс использования специализированной камеры, но и пользу от резервирования систем.

Именно поэтому запись стрима осуществлялась на фронтальную камеру — чтобы знать что смартфон втихую не выключился.

Таким образом, округлённое максимальное качество на которое я мог рассчитывать составляет 1920x1080, 20 fps, bitrate: 20000 kb/s.

А как же получилось в реальности?

Стрим на Youtube


Так как пузомерки моего канала недостаточно высоки, то стримить со смартфона я не могу.

Всё что мне удалось — ответить на вопрос о скачивании видеофайла с сервиса.

Частота кадров скачанного файла, вполне ожидаемо, совпадала с частотой кадров в загруженном файле. (Обе они не совпадали с частотой кадров в исходных файлах, ибо прошли через видеоредактор.)

А вот остальные характеристики отличались.

Да, studio.youtube.com позволяет скачать своё видео прямо из интерфейса владельца канала, но вместо 1920x1080 я получил 1280x720. И хотя я включил в браузере режим воспроизведения 1920x1080 и скачал файл соответствующего разрешения, оказалось что он похудел в полтора раза — было 1,48Гб, а стало 999 Мб и звук шёл отдельным файлом.

Тем не менее, В СЛУЧАЕ ЗАЛИТЫХ ФАЙЛОВ, Youtube предоставляет штатные средства для скачивания своих видео с разрешением 1280x720 и есть нештатная возможность скачать 1920x1080 (не исходные, а перекодированные).

Увы, эти выводы могут быть неприменимы к стримам на Youtube, поэтому в конечных выводах они не учитывались.

Стрим на Facebook


Facebook неприятно удивил качеством стрима — 360p ( 640x360 ). Однако, через несколько дней после стрима разрешение видео стало 1280x720.

Скриншот стрима на Facebook
Запись стрима на Facebook
Параллельная запись с другой камеры на Youtube — Жюль Верн и предсказание атомной бомбы

Как легко заметить, Facebook зеркалит видео. Дефолтное приложение «Камера» у меня настроено без зеркаленья (это видно на первых примерах), но фейсбуковому приложению это не указ.

Что интересно, в интернете пишут, что раньше можно было отключить зеркаленье при стримах через приложение Facebook, но несколько лет назад такая возможность пропала.

К счастью, это не самая большая проблема — можно же скачать файл и отзеркалить вручную.

Конечно же, если получится скачать. Оказалось, что в интерфейсе Facebook есть ссылка для скачивания своего видео, но он не срабатывает. Зато, после завершения стрима на смартфоне появилось предложение сохранить файл. Размер этого файла практически совпадает с тем который я выкачал из браузера (видео и звук идут отдельными файлами).

И версия выкачанная из браузера и версия сохранённая на смартфоне имеют разрешение 1280x720 и частоту кадров 10,4 fps (как выглядят 10fps хорошо видно на скриншоте — размытое пятно является моей рукой). А вот битрейт выглядит плохо — 791 kb/s.

Данные ffmpeg
Для браузерного (без звука)
Duration: 00:50:34.50, start: 0.000000, bitrate: 713 kb/s
Stream #0:0(eng): Video: h264 (Main) (avc1 / 0x31637661), yuv420p(tv, smpte170m/bt470bg/smpte170m), 1280x720, 0 kb/s, 10.40 fps, 10.40 tbr, 16648 tbn, 20.81 tbc (default)

Для смартфонного
Duration: 00:50:34.53, start: 0.000000, bitrate: 791 kb/s
Stream #0:0(eng): Video: h264 (Baseline) (avc1 / 0x31637661), yuv420p(tv, smpte170m/bt470bg/smpte170m), 1280x720, 722 kb/s, SAR 1:1 DAR 16:9, 10.40 fps, 10 tbr, 90k tbn, 180k tbc (default)

Пользуясь случаем я проверил что Facebook отдаст мне при «скачать свою информацию» и получил файл с разрешением 640x360

данные ffmpeg
Duration: 00:50:34.53, start: 0.000000, bitrate: 383 kb/s
Stream #0:0(und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p, 640x360, 316 kb/s, 10.40 fps, 10 tbr, 16k tbn, 2k tbc (default)

И это при выборе «Высокое качество» для экспорта медиафайлов!

Стрим во Вконтакте


Да, Вконтакте тоже зеркалит стрим с фронтальной камеры и я не нашёл как это изменить.

Нет, это другая футболка.

Скриншот стрима во Вконтакте
Запись стрима во Вконтакте
Параллельная запись с другой камеры на Youtube — Обзор книги Норвежский лес (Ларс Миттинг)

Штатной функции скачивания файла со своим стримом нет, а за кнопкой «Экспорт» находится окошко с кодом iframe для вставки видео на веб-сайты.

Нештатные позволяют выкачать видел с разрешением 1280x720

Вообще, в браузер идут кусочки на которые ffmpeg реагирует вот так
Duration: 00:00:08.82, start: 107.324000, bitrate: 5004 kb/s
Program 1
Stream #0:0[0x100]: Audio: aac (LC) ([15][0][0][0] / 0x000F), 44100 Hz, mono, fltp, 158 kb/s
Stream #0:1[0x101]: Video: h264 (Baseline) ([27][0][0][0] / 0x001B), yuv420p(tv, smpte170m/bt470bg/smpte170m), 1280x720, 90k tbr, 90k tbn, 180k tbc

Но можно использовать браузерный плагин и получить файл который ffmpeg видит так
Duration: 00:55:26.54, start: 0.000000, bitrate: 4686 kb/s
Stream #0:0(und): Video: h264 (Baseline) (avc1 / 0x31637661), yuv420p(tv, smpte170m/bt470bg/smpte170m), 1280x720, 4525 kb/s, 10.38 fps, 12.50 tbr, 90k tbn, 180k tbc (default)

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

Итого:

  • штатных средств скачивания видео Вконтакте не предлагает и на смартфон не сохраняет
  • нештатными средствами мне удалось скачать свой стрим в качестве 1280x720, 10,38fps, bitrate: 5004 kb/s (очень хороший битрейт)

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

Стрим на Одноклассниках


Конечно же, я есть на Одноклассниках. Я исследователь изучающий историю отечественной техники, а на Одноклассниках есть люди занимавшиеся проектированием и выпуском этой техники.

Вполне ожидаемо, что им досталась тема про историю создания бензопилы «Дружба».

Скриншот стрима в Одноклассниках
Запись стрима в Ондоклассниках
Параллельная запись с другой камеры на Youtube — Бензопила Дружба и её изобретатели

Одноклассники приятно удивили двумя вещами:

  • в отличии от предыдущих конкурсантов, стрим на сайте шёл с незначительной задержкой (в наушниках на ноутбуке я слышал свои слова практически сразу как их произносил)
  • картинка не отзеркалена

Увы, но эти плюсы очень легко перекрылись.

1) Стрим начинается с основной камеры смартфона. Это не только выдаёт в эфир лишнюю информацию (да, у меня там был бардак), но и не позволяет выставить смартфон в нужное положение до начала стрима.

2) В настройках стрима есть указание географической локации, даже если есть приложению не выданы права на доступ к определению локации. Не исключаю, что это нужно для привязке к карте, но я не любитель неотключаемых «удобств»

3) Странное моргание видео. Причём, не только в трансляции на сайте, а прямо на экране смартфона ведущего трансляцию. (Я об этом упоминаю в начале стрима)

4) Минимальная задержка в трансляции убивалась не только морганием картинки, но и пропаданием звука (последние секунды стрима вообще без звука).

И это я ещё не дошёл до скачивания файла и fps.

Штатных средств скачивания или сохранения файла на смартфоне я не нашёл.

Нештатными средствами был получен странный файл. Вот как его видит ffmpeg
Duration: 00:33:35.99, start: 0.000000, bitrate: 3028 kb/s
Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1280x720, 3 kb/s, 24.81 fps, 25 tbr, 90k tbn, 2000k tbc (default)

Да, там ожидаемые 1280x720 вместо 1920x1080, но неожиданно обнаруживается частота кадров почти в 25fps. И я не верю в то, что это честная частота кадров снимаемая с камеры.

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

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

Короче, что-то они перемудрили.

Стрим в Instagram


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

Скриншот стрима в Instagram
Запись стрима в Instagram (дополнительный тестовый стрим)
Параллельная запись с другой камеры на Youtube — BMW STIHL BOSCH и их корпоративные мифы

И дело даже не в том, что кроме зеркаленья картинка была ещё и повернута, это-то не самое проблемное.

Главная проблема состоит в том, что стрим проведённый на Instagram не сохранился.

После завершения трансляции, мне был предложен выбор дальнейших действий. Когда я попробовал заскриншотить экран произошло классическое «я куда-то нажал и всё пропало». А так как все стримы пользователя происходят по одному и тому же адресу www.instagram.com/motopila.ru/live, то из закончившегося стрима меня сразу выкинуло. То есть, я не мог спасти его даже через браузер. (Что интересно, в последнее время я встречал сообщения других людей на утрату стрима проведённого в Instagram.)

К счастью, у меня была вторая камера которая снимала видео для выкладывания на Youtube и сам рассказ у меня сохранился, но ещё я хотел получить технические данные для анализа.

Для этого были проведены ещё несколько тестовых стримов со следующим результатом:

1) Функция сохранения файла на смартфон не работает. Она сперва выдаёт ошибку, потом пишет что всё нормально, но в созданной папке нет файла.

2) Можно воспользоваться функцией публикации на IGTV, но туда нельзя загружать файлы короче 1 минуты и длиннее 60 минут.

В итоге, я всё таки сделал тестовый стрим, сохранил его в Instagram и выкачал файл нештатным способом.

Вот данные от ffmpeg
Duration: 00:01:41.56, start: 0.000000, bitrate: 520 kb/s
Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 432x812, 471 kb/s, 29.85 fps, 30 tbr, 16k tbn, 60 tbc (default)

Картинка не только повёрнута, не только отмасштабирована — у неё ещё и другие пропорции.

При этом, к частоте кадров вопросов не возникает. Оно вполне может быть реальным, просто из-за того что слишком близко поднёс к камере своё освещённое лицо.

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

Выводы


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

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

Разрешения в 1920x1080 не даёт никто. Картинку с фронтальной камеры зеркалят все протестированные социальные сети, кроме Одноклассников.

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

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

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

Instagram стримит с прекрасной частоту кадров (хоть и на некорректном примере), но не только зеркалит картинку. Он её поворачивает, стримит с плохим разрешением и странными пропорциями. Ну и шанс потерять запись стрима слишком велик.

Получается, что во всех социальных сетях есть проблемы с качеством стрима и специфические «подводные камни».

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

Ну а сам я продолжу просто писать свои рассказы на большую камеру и выкладывать на Youtube 1920x1080, 25fps видео.