Быстрый прототип iiot-решения на raspberry pi и yandex iot

Исходные коды программ

Код программы для мигания светодиодом с помощью Node.js

JavaScript

var Gpio = require(‘onoff’).Gpio;
var LED = new Gpio(4, ‘out’);
var blinkInterval = setInterval(blinkLED, 500);
function blinkLED() {
if (LED.readSync() === 0) {
LED.writeSync(1); //включаем светодиод
} else {
LED.writeSync(0); //выключаем светодиод
}
}
function endBlink() {
clearInterval(blinkInterval);
LED.writeSync(0);
LED.unexport(); // Unexport GPIO to free resources (освобождаем занятые ресурсы)
}
setTimeout(endBlink, 10000);

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

varGpio=require(‘onoff’).Gpio;

varLED=newGpio(4,’out’);

varblinkInterval=setInterval(blinkLED,500);

functionblinkLED(){

if(LED.readSync()===){

LED.writeSync(1);//включаем светодиод

}else{

LED.writeSync();//выключаем светодиод

}

}

functionendBlink(){

clearInterval(blinkInterval);

LED.writeSync();

LED.unexport();// Unexport GPIO to free resources (освобождаем занятые ресурсы)

}

setTimeout(endBlink,10000);

Код программы для управления светодиодом с помощью Node.js веб-сервера

JavaScript

var express = require(‘express’);
var app = express();
var path = require(‘path’);
var gpio = require(‘rpi-gpio’);
gpio.setup(7, gpio.DIR_OUT);
app.set(‘view engine’, ‘ejs’);
app.use(express.static(path.join(__dirname, ‘public’)));
console.log(path.join(__dirname, ‘public’));
app.get(‘/’, function(req, res){
res.render(‘index’,{status:»Press Button»});
});
app.post(‘/led/on’, function(req, res){
gpio.write(7, true, function(err) {
if (err) throw err;
console.log(‘Written True to pin’);
console.log(path.join(__dirname, ‘public’));
return res.render(‘index’, {status: «Led is On»});
});
});
app.post(‘/led/off’, function(req, res){
gpio.write(7, false, function(err) {
if (err) throw err;
console.log(‘Written False to pin’);
console.log(path.join(__dirname, ‘public’));
return res.render(‘index’,{status: «Led is Off»});
});
});
app.listen(3000, function () {
console.log(‘Server Started on Port: 3000!’)
})

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

varexpress=require(‘express’);

varapp=express();

varpath=require(‘path’);

vargpio=require(‘rpi-gpio’);

gpio.setup(7,gpio.DIR_OUT);

app.set(‘view engine’,’ejs’);

app.use(express.static(path.join(__dirname,’public’)));

console.log(path.join(__dirname,’public’));

app.get(‘/’,function(req,res){

res.render(‘index’,{status»Press Button»});

});

app.post(‘/led/on’,function(req,res){

gpio.write(7,true,function(err){

if(err)throwerr;

console.log(‘Written True to pin’);

console.log(path.join(__dirname,’public’));

returnres.render(‘index’,{status»Led is On»});

});

});

app.post(‘/led/off’,function(req,res){

gpio.write(7,false,function(err){

if(err)throwerr;

console.log(‘Written False to pin’);

console.log(path.join(__dirname,’public’));

returnres.render(‘index’,{status»Led is Off»});

});

});

app.listen(3000,function(){

console.log(‘Server Started on Port: 3000!’)

})

Сервер Ubuntu

Ubuntu Server — один из лучших серверных дистрибутивов Raspberry Pi. Он поддерживает систему пакетов Snap, в которую загружено множество предварительно настроенных серверных приложений. Он также пользуется преимуществами Canonical, корпорации, стоящей за Ubuntu, обеспечивая регулярные обновления программного обеспечения и широкую поддержку различных серверных приложений, таких как Plex, Docker, NextCloud, Apache, Nginx и этот список можно продолжать.

Примечательные особенности

  • Поддержка пакетов Snap, которые содержат множество предварительно настроенных, простых в настройке серверных приложений.
  • Ubuntu основан на Debian, поэтому пользователи Ubuntu Server на Pi также будут использовать программное обеспечение, предназначенное для Raspberry Pi OS / Raspbian.
  • Компания, стоящая за Ubuntu, регулярно обновляет программное обеспечение, поэтому ОС никогда не перестанет работать.

Скачивание сервера Ubuntu

Чтобы получить Ubuntu Server для Raspberry Pi, перейдите на Страница RPi на Ubuntu.com. Оказавшись там, выберите устройство Pi, которое вы используете, и загрузите образ ОС сервера. У них есть поддержка Pi 2, Pi 3 и Pi 4.

Установите Ubuntu Server на Pi

Чтобы установить Ubuntu Server на Raspberry Pi, сделайте следующее. Во-первых, убедитесь, что у вас есть быстрая SD-карта размером не менее 16 ГБ. Затем загрузите Etcher Инструмент USB / SD.

После загрузки Etcher откройте приложение, нажмите кнопку «Flash из файла» и выберите образ сервера Ubuntu. Затем нажмите кнопку «Выбрать цель», чтобы выбрать SD-карту.

После того, как вы выбрали SD-карту, выберите «Flash!» кнопку, чтобы установить Ubuntu Server на SD-карту Pi.

Установка и настройка сервера

Для того чтобы на Raspberry Pi 3 NAS-сервер заработал необходимо установить Samba. Это ПО есть в стандартном репозитории. На Raspbian оно скачивается командой: apt-get install samba samba-common-bin. Ее, конечно, нужно выполнять из-под sudo.

Теперь потребуется отредактировать конфигурационный файл. Для этого нужно воспользоваться предпочтительным консольным редактором, например, nano. Чтобы начать настройку, следует из-под суперюзера в консоли ввести следующее: nano /etc/samba/smb.conf.

В первую очередь нужно раскомментировать строку Authentication, убрав перед ней символ решетки. Далее следует найти строчку security=user, тоже удалив перед ней символ диез.

Когда вышеперечисленное сделано, останется указать путь к сетевым ресурсам. Это делается в переменной path. Ей следует присвоить следующее значение: /nas/shares/public. Под ней должна быть строчка read only. Нужно, чтобы значение соответствующей переменной было no. В противном случае не будет возможности записывать файлы в хранилище. Далее нужно сохранить изменения и можно выходить.

Теперь следует назначить пароль доступа. Делается это при помощи следующей команды: smbpasswd –a pi. После нажатия на ввод система предложит ввести пароль, а затем нужно будет подтвердить его, указав еще раз.

Далее понадобится подключить к «Малине» накопитель, например, жесткий диск. Его следует отформатировать. Для этого в консоли нужно ввести следующие команды:

unmount /dev/sda1 – размонтирует подключенный диск;

mkfs.ext3 /dev/sda1 – выполнить быстрое форматирование в формат ext

Теперь понадобится создать папки. Это делается следующей командой: mkdir /nas/shares/public/nas1 –p.

Но пока система не знает, какой именно накопитель использовать в качестве хранилища. Для этого следует открыть файл /etc/fstab и прописать в него следующее:

  • proc /proc     proc       defaults               0             0
  • /dev/mmcblk0p1 /boot    vfat        defaults               0             2
  • /dev/sda1     /nas/shares/public/nas1             ext3       defaults               1             1

Теперь, чтобы завершить создание сервера на Raspberry Pi, остается только назначить права. Но предварительно следует перезагрузить «Малину».

После загрузки нужно ввести следующее:

  • chown –R root:users /nas/shares/public
  • chmod R -775 /nas/shares/public

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

Вот и вся инструкция, касающаяся того, как из Raspberry Pi сделать сервер. Теперь можно подключиться к нему через встроенные в систему или сторонние инструменты. Например, в Windows это делается следующим образом:

  • выбор в окне «Компьютер» пункта «Сервис»;
  • выбор «Подключить сетевой диск»;
  • указание расположения корневой паки сервера;
  • ввод логина pi и пароля, созданного для соответствующего пользователя.

NAS-сервер на основе Samba имеет множество функций. Чтобы узнать о них, обратитесь к документации (лучше официальной) Samba. Также вы можете получить более подробную информацию на эту тему, просто почитав о NAS-серверах и их настройке на платформе Linux

Ведь неважно, поднимается ли на Raspberry Pi 3 сервер или он создается на основе обычного ПК, или даже гигантского хранилища. Принципы работы с ним одни и те же, так как ПО используется одно и то же

How does it work?

Before going deeper about the installation steps, I want to be sure that everyone understand what we are doing and how a web server works.

Apache

The main goal for the Apache service is to answer requests on HTTP and HTTPS ports of your Raspberry Pi.HTTP and HTTPS are the main protocols on the Internet for web surfingIt works because Apache is here to respond to your browser requests on ports 80 and 443.

Apache receives a request on http://<RASPBERRYPI_IP> and has to display something, depending on your Apache configuration.Typically, it’s an HTML page for your website or the app you’re using on the Raspberry Pi.HTML is a language served by Apache and readable by your web browser to display web pages.

Raspberry Pi BootcampSale: 10% off today.Take it to the next level.I’m here to help you get started on Raspberry Pi.Learn all the skills you need in the correct order.Watch now!

PHP

PHP is here to bring dynamic content to your web pages.HTML is a static page language you can supercharge with PHP code to make your page look different depending on external conditions (visitor language, visitor history, time of the day, etc …).

Here’s what happens when a visitor sees your page:

  • PHP compiles the PHP code in your page (via an Apache module)
  • PHP generates a specific HTML code
  • Apache always display static HTML code, but this time PHP generated it before

I’ll show you examples later in this post to better understand this part.

MySQL

MySQL is a way to manage a database on your web server, to store any data you need to keep on your site.For example, on RaspberryTips, there is a database with all the posts, all the images links, all the comments, etc …

MySQL includes three parts:

  • A server, to store data in files and answer requests
  • A client, to connect the server locally or remotely
  • A specific language (SQL), to grab the needed data precisely (from PHP for example)

Добавляем в систему PDF-принтер

Отдельно напишу о том, как подключить к принт-серверу CUPS виртуальный PDF-принтер.

Что есть PDF-принтер? Это виртуальное устройство, которое добавляется в систему как обычный принтер и при отправке документа на печать генерирует из него pdf-файл. Использовать PDF-принтер удобно для сохранения статей из интернета или отдельных страниц многостраничного документа в виде отдельного файла.

Для установки PDF-принтера нужно установить отдельный пакет:

sudo apt-get install cups-pdf

Затем создать на Raspberry Pi папку для хранения получаемых pdf-файлов и прописать к ней права доступа:

mkdir -p /mnt/usbstorage/PDF
sudo chown pi:lpadmin /mnt/usbstorage/PDF
sudo chmod 777 /mnt/usbstorage/PDF

И отредактировать файл конфигурации:

sudo nano /etc/cups/cups-pdf.conf

В нем нас интересуют следующие строки:

#Out /var/spool/cups-pdf/${USER}
#AnonDirName /var/spool/cups-pdf/ANONYMOUS
#Spool /var/spool/cups-pdf/SPOOL
#TitlePref 0

Их нужно раскомментировать (удалить знак #) и изменить следующим образом:

Out /mnt/usbstorage/PDF
AnonDirName /mnt/usbstorage/PDF
Spool /mnt/usbstorage/PDF
TitlePref 1

Первые 3 строки меняют пути сохранения pdf-файлов в созданную нами директорию на внешнем носителе, а четвертая строка меняет формат генерации названия выдаваемого файла. Дело в том, что с настройкой по умолчанию CUPS-PDF не осиливает длинные русскоязычные названия документов и в результате не сохраняет сгенерированные pdf-файлы на диск. После изменения этой настройки проблема уходит.

После чего остается перезагрузить сервер CUPS:

sudo service cups restart

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

Настройка сервера Minecraft

После завершения загрузки перейдите в каталог и запустите сервер Minecraft:

При первом запуске сервер выполняет некоторые операции, создает файлы и и останавливается.

Для запуска сервера вам необходимо согласиться с лицензионным соглашением Minecraft. Откройте файл и измените на :

~ / Сервер / Eula.txt

Закройте и сохраните файл.

Затем отредактируйте файл чтобы включить протокол rcon и установить пароль rcon. Откройте файл с помощью вашего текстового редактора:

Найдите следующие строки и обновите их значения, как показано ниже:

Не забудьте сменить надежный на более безопасный. Если вы не хотите подключаться к серверу Minecraft из удаленных мест, убедитесь, что ваш брандмауэр блокирует порт rcon.

Здесь вы также можете настроить свойства сервера по умолчанию. Для получения дополнительной информации о доступных настройках, посетите страницу server.properties.

How to install web server components?

At this point, you should understand what is each component (Apache, PHP and MySQL), and if you need it or not.Maybe you want to create a basic and static web server, then Apache will be enough.Or if you want dynamic pages but you don’t need to save data on the server, Apache and PHP will be enough.

I’ll let you make your choice and skip the unnecessary parts in the following procedures.Before starting you need two prerequisites:

  • Install Raspberry Pi OS on your Raspberry Pi if not done already
  • Update your Raspberry Pi OS system to get the last version of each component:

Install Apache

The first step is to install Apache on your Raspberry Pi.To do this use apt like this:

Then we’ll check if Apache is working:

  • Find your Raspberry Pi IP address
  • Open your web browser and go to http://<RASPBERRY IP>For example, http://192.168.1.18
  • Check that a page like this appear

As you can see in this page, web pages are located under /var/www/html on the Raspberry Pi.You can edit index.html to change this page or add new pages in the same folder.

You can also remove this page and just upload the files you want to share in this folder.For example, if you want to share files on your network, just remove the index.html and put your files in /var/www/html, Apache will automatically generate a web page with links to each one

Install PHP

Then we need to install PHP to add dynamic content capabilities to our web server.

Installation

To install PHP we need to add two packages:

The first one adds the core package for PHP and the possibility to run PHP scripts in the terminal.The second allows us to add PHP code in web pages.

First PHP page

We’ll check if everything is fine with our installation before going further.

Follow these steps to create a PHP file and test it in your browser:

  • Go to the Apache web folder:
  • Create a PHP file:
  • Copy this code into it:This is a basic PHP function to display PHP configuration in the browser.
  • Save and Exit (CTRL+O, CTRL+X)
  • Go to this URL with your web browser: http://<RASPBERRY IP>/test.php
  • This should display something like this:

If you see this page, everything is OK, your Apache and PHP web server is ready.Move to the next chapter if needed.

Master your Raspberry Pi in 30 daysSale: 10% off today.Download the eBook.Uncover the secrets of the Raspberry Pi in a 30 days challenge.Learn useful Linux skills and practice multiples projects.Get it Now!

Install MySQL

The last component is MySQL, and again we need to install it with this command:

The second package adds the possibility to use MySQL functions in PHP code.You need to restart Apache to add this functionality:

Create your first MySQL user

MySQL stores data. Authentication is required to be sure that only allowed people can access these data.For a quick start, we’ll create a MySQL super user to use in our PHP code later.But you can create as many users as you want with different privileges:

  • Log into the MySQL console:
  • Create your first database:
  • Create the first user:Try to use a strong password immediately, you’ll forget to change it later
  • Add all privileges to our test database to this user:
  • Save the changes:
  • Quit the MySQL console:

Create a first table in the database

Now we have a test database and a test user, we’ll check that everything works fine by creating a first table in the database to use it later in the PHP code.

If you’re new with these database words, imagine the database as an Excel spreadsheet and a table as a tab in this spreadsheet. We’ll store data in this table.

  • Go back to the MySQL console, but with the “webuser” this time:
  • Create a basic table:Obviously, this is a basic useless table, if you want to use anything else you can.Press ENTER after pasting the request.
  • Insert one line in this new table:We add a first line in your table, with “test” in the data field.Yes, I’m very creative with this 
  • Exit:

Now we’re ready to move to the PHP code.We have all we need (database, table and user).

First PHP script to connect to MySQL

After all these preparation steps we can now check if PHP can speak with MySQL:

  • Go to the Apache folder:
  • Create a new PHP file:
  • Paste these lines into it:You may need to edit the first line to fit your first user login and password.
  • Save and Exit (CTRL+O, CTRL+W)
  • Switch to your web browser and check the URL: http://<RASPBERRY IP>/test-mysql.phpThis should display the content of your database table.

Here we are, you know how to install a basic web server and create a first page to connect to MySQL and display something from your database.Feel free to adapt the database and the PHP code to fit your needs.

You may also like:

  • 25 awesome Raspberry Pi project ideas at home
  • 15 best operating systems for Raspberry Pi (with pictures)
  • My book: Master your Raspberry Pi in 30 days

Шаг 2: Установите PHP на Raspberry Pi

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

Хотя доступны другие серверные платформы (например, ASP), здесь жизненно важен PHP, поскольку он необходим для WordPress, потому что сам WordPress написан на PHP.

Установить с помощью:

Как только это будет сделано, вы должны проверить, что PHP работает. Измените каталог на / var / www / html / вот так:

Здесь удалите файл index.html (веб-страницу, которую вы просматривали ранее):

Затем создайте новый файл с именем index.php (по умолчанию установлен nano):

Здесь добавьте любой (или все) из следующего кода:

По порядку эти команды отображают:

  • Фраза «привет, мир»
  • Текущая дата и время
  • Информация PHP для установки

Сохраните файл, затем перезапустите Apache:

Обновите страницу, чтобы увидеть результаты.

PHP и Apache работают. Пришло время установить программное обеспечение базы данных MySQL.

Объектное хранилище MinIO

Придерживаясь микросервисного подхода, ответственность за хранение видеозаписей хотелось бы скинуть на какой-то отдельный сервис. Что, собственно, и было сделано. Отличным решением такой задачи стало open-source хранилище MinIO. Разворачивается мгновенно, масштабируется превосходно, веб-интерфейс крайне удобен. 

Решение предлагает пользователю размещать файлы любого расширения в так называемые bucket’ы (или же корзины):

Что ж, переходим к самому анализатору данных. Сервис написан на Java с использованием Spring фреймворка. Для инициализации MQTT-слушателя добавляем в зависимости следующее:

Сама же конфигурация выглядит следующим образом:

Обработка полученных сообщений представлена классом MqttMessageHandler:

Добавим в зависимости следующее:

Конфигурация MinIO:

Изящно, не так ли? 

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

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

Настройка брокера MQTT в облаке

Теперь можно приступить к настройке серверной части решения. Для этого воспользуемся облачным сервисом Yandex, называемым Yandex IoT Core.

MQTT — ещё один де факто стандартный протокол для IoT-проектов. Вот тут есть хороший обзор самого протокола, поэтому подробно на нем останавливаться не буду, но немного расскажу как устроен MQTT-брокер от Yandex:

В Yandex IoT Core есть два основных типа объектов — реестры и устройства.

Реестры с одной стороны группируют устройства (в одном реестре может быть одновременно несколько устройств) а с другой — являются как бы второй стороной обмена сообщениями.

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

Организация топиков Yandex IoT Core

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

Для дальнейших действий потребуется учетная запись Yandex.Cloud. Если у вас такой еще нет, ее можно достаточно быстро завести. В процессе необходимо ввести данные карты но (в отличии от некоторых других облачных сервисов) деньги с неё списываться не будут пока вы явно не переключитесь на платный аккаунт. После регистрации Yandex предоставляет небольшой грант в 4К рублей, которого на приведенные тут эксперименты хватит с лихвой.

Подключаем и настраиваем сервис:

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

Сгенерировать пару сертификатов можно при помощи утилиты OpenSSL вот такой командой:

Теперь заходим в консоль Yandex.Cloud, выбираем IoT Core и создаем новый реестр:

Открытую часть ключа, сгенерированного на предыдущем шаге (crt_reg.pem), загружаем в настройки реестра. Этот сертификаты будут использоваться для считывания телеметрии из брокера внешними сервисами и отправки команд устройствам:

Нажимаем «Создать» и попадаем в настройки свежесозданного реестра. Теперь надо зарегистрировать в нем малинку в качестве устройства. 

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

Заходим в Устройства и создаем новое:

Аналогично с созданием реестра загружаем сертификат из пары, созданной на малинке и нажимаем «Добавить».

На этом настройка брокера завершена, всё готово для приема сообщений.

ID устройств и реестров можно посмотреть на вкладке «Обзор». Они нужны для задания адресов топиков:

Топик устройства: $devices/<ID устройства>/events

Топик реестра: $registries/<ID реестра>/events

Также у каждого устройства и реестра есть перманентный топик. Основное отличие перманентных топиков состоит в том, что в них всегда сохраняется последнее сообщение. То есть при подключении консьюмер получит последнее отправленное в него сообщение, даже если не был в сети в момент его отправки. Адреса перманентных топиков похожи на обычные, но заканчиваются на state а не events:

Перманентный топик устройства: $devices/<ID устройства>/state

Перманентный топик реестра: $registries/<ID реестра>/state

Подробнее о топиках Yandex IoT Core можно почитать вот тут.

OpenMediaVault

OpenMediaVault — это готовый к работе дистрибутив Linux на основе Raspbian, который позволяет пользователям создавать сервер NAS (сетевое хранилище) с веб-интерфейсом. Он невероятно прост в использовании и отлично работает на Raspberry Pi 4 и более старых моделях. Поскольку дистрибутив построен на Raspbian, пользователи также получают выгоду от запуска традиционных серверных приложений Pi, поддерживаемых сообществом (Plex, Docker и многие другие).

Примечательные особенности

  • Он позволяет пользователям быстро и легко настраивать даже самые сложные операции с сервером Linux с помощью отличного веб-интерфейса.
  • Построенный на основе версии Debian для Raspberry Pi, он также поддерживает все, что делает ОС Raspberry Pi.

Скачивание OpenMediaVault

Чтобы получить OpenMediaVault для Raspberry Pi, обратитесь к их официальному SourceForge. У них есть поддержка Pi 4 и Pi 3 (хотя Pi 3 не рекомендуется).

Установка OpenMediaVault на Pi

Настройка OpenMediaVault может быть немного сложной, так как вам придется иметь дело с веб-интерфейсом. Чтобы узнать, как установить OMV на Raspberry Pi, следуйте нашему подробному руководству по этому вопросу.

О производительности Plex на Raspberry Pi 3

Raspberry Pi 3 обладает достаточной мощностью для воспроизведения видеофайлов, в том числе и в fullHD разрешении.

Проблемы могут возникнуть при включении транскодирования в настройках Plex: с этой опцией воспроизводимые медиафайлы будут «на лету» перекодироваться из оригинального разрешения в выбранное пользователем пониженное.

Справиться с этой задачей в реальном времени скромный в плане производительности процессор Raspberry Pi уже не в состоянии.

Но такая опция для работы с системой не нужна, и включать транскодирование не нужно.

Если Plex все-таки тормозит

В некоторых случаях Plex на Raspberry Pi может тормозить и при отключенном транскодировании. Тормоза при воспроизведении сопровождаются всплывающими подсказками, описывающими суть проблемы.

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

Такая проблема может возникать при воспроизведении fullHD-видео, если Raspberry Pi подключен к сети по Wi-Fi, а частотный диапазон Wi-Fi в вашей локации перегружен обилием сетей, что приводит к сильному падению скорости.

Решение: подключить Raspberry Pi к домашней сети по Ethernet вместо Wi-Fi.

Тормоза исчезнут. Проверено.

Сервер недостаточно мощный для конвертации видео и плавного воспроизведения. 
Попробуйте проиграть файл в оригинальном качестве.

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

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

С настройками по умолчанию Plex начинает перекодировать видеофайл, «зашивая» в него строку субтитров и отдавая уже этот видеофайл клиенту вместо того чтобы транслировать оригинальный видеофайл и уже на клиентской стороне накладывать на него субтитры в текстовой форме. Естественно, для перекодирования «на лету» мощности ARM-процессора Raspberry Pi не хватает, что приводит к постоянному подтормаживанию воспроизведения.

Решение: зайти в «Настройки» -> «Веб» -> «Плеер» и переключить значение опции «Записать субтитры» с «Always» на «Automatic» или «Only images format».

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Вековой опыт
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: