Cột radio Internet đơn giản nhất "Kodi" hay sự cứu rỗi của viên gạch "Raspberry"

Cột radio Internet đơn giản nhất "Kodi" hay sự cứu rỗi của viên gạch "Raspberry"

Điều kiện tiên quyết cơ bản:

  1. Có một bo mạch Raspberry Pi thế hệ đầu tiên cũ chưa sử dụng;
  2. Tấm ván nằm trên tủ như một vật nặng và không được sử dụng - tấm “Gạch”;

Những gì tôi muốn nhận được:

  1. Tại một thời điểm nhất định (ví dụ: theo tâm trạng)
    bảng không còn là "Viên gạch" và một thẻ nhớ ma thuật được lắp vào đó;
  2. Cáp Ethernet và phích cắm từ loa hoặc tai nghe thông thường của gia đình được kết nối với bo mạch;
  3. Sau khi cấp nguồn, “Brick” trước đây - nhà thơ

Ý chính:

  1. Số lượng cử chỉ tối thiểu cho bất kỳ thiết lập nào, trong trường hợp lý tưởng nhất, chúng tôi chỉ kết nối cáp, nguồn và loa “Ethernet” và không làm gì khác, từ từ "ở tất cả";
  2. Ví dụ: "Brick" trước đây hỗ trợ 20 đài phát thanh Internet, có thể chuyển đổi theo vòng tròn bằng cách nhấn con lăn chuột hoặc trên một chân GPIO cụ thể (kết nối hai dây và rút ngắn chúng (giấc mơ của tôi từ khi còn nhỏ) );
  3. Việc điều khiển được thực hiện thông qua kênh vô tuyến và kênh vô tuyến này có thể là chuột vô tuyến thông thường;
  4. Lấy một hệ thống làm sẵn và tập hợp phân phối vào “Dự án Yocto”
    những thứ kia. như thường lệ, chúng tôi sẽ không làm gì bạn vì mọi thứ đã được thực hiện xong.
    (chỉ cần đặt một người quan sát bên ngoài ở phía bên kia là đủ "TRUYỀN HÌNH");

Описание

Chuyên mục Internet Radio đơn giản nhất “KODI”
Việc lắp ráp được thiết kế cho các bo mạch Raspberry Pi 1 cũ hơn
(thu thập bụi ở đâu đó trên tủ, nhưng đã sẵn sàng làm thêm một số công việc)

Theo mặc định, danh sách m3u8 gồm 12 đài phát thanh Internet được sử dụng.

Giả định rằng bo mạch hoạt động mà không có đầu ra HDMI và để tắt nó, bạn chỉ cần rút bộ đổi nguồn ra khỏi ổ cắm. Và với tư cách là một bảng điều khiển không dây cực kỳ hiện đại, bạn có thể sử dụng chuột radio siêu hạng của mình (hoặc kết nối một con chuột màu xám thông thường có đuôi).

Khi được bật, giao diện mạng mặc định được cấu hình thông qua giao thức DHCP và đài phát thanh được ghi nhớ cuối cùng trong danh sách sẽ được phát, âm lượng phát lại được điều khiển bằng chuột thông thường:
(cuối cùng hãy bổ nhiệm con chuột của bạn làm “trưởng phòng quản lý” và chúc mừng nó, nó xứng đáng được như vậy)

  колесико вперед  - увеличение громкости звука
  колесико назад   - уменьшение громкости звука
  длительное нажатие (3сек и более) на правую кнопку мыши
                   - выбор следующий радиостанции
  длительное нажатие (3сек и более) на левую кнопку мыши
                   - выбор предыдущей радиостанции

Để thêm danh sách các đài phát thanh Internet của riêng bạn
bạn luôn có thể kết nối cáp HDMI từ TV của mình
và sử dụng giao diện đồ họa chuẩn của Kodi 17.6
(tắt bo mạch, kết nối HDMI và bật bộ đổi nguồn)

Menu chính của Kodi => “Tiện ích bổ sung” => “Tiện ích bổ sung của tôi”
          => “Khách hàng PVR” => “Khách hàng đơn giản PVR IPTV”

Triển khai ban đầu

(khả thi)
Ban đầu, khi quyết định làm “Cột Internet Radio”, tôi đã lên kế hoạch như sau:

  • Phân phối bảng điều khiển tối giản trong Dự án Yocto;
  • Luồng âm thanh được phát qua GStreamer;
  • Giao diện mạng được cấu hình qua DHCP;

Và giải pháp này có một số ưu điểm:

  1. Khá nhanh (mất 30-40 giây để đạt chế độ hoạt động từ nguồn điện);
  2. Khá đáng tin cậy (ít chương trình hơn, ít điểm thất bại hơn);
  3. Bản phân phối bảng điều khiển dễ dàng hơn nhiều để chuyển sang chế độ chỉ đọc
    những thứ kia. chương trình không ghi gì vào hệ thống tập tin gốc
    (và theo tôi, hệ thống tệp trên phương tiện SDHC là ứng cử viên đầu tiên cho sự thất bại);

Lưu ý:

    В Yocto перевести корневую файловую систему (rootfs) 
    в режим только чтение можно сделать достаточно просто, 
    изменив один параметр во время сборки 

    Из коробки Yocto предлагает два варианта:
    1) Работа файловой системы в обычном режиме чтение/запись 
    (так работают все дистрибутивы общего назначения, например Ubuntu)
    2) Работа файловой системы в режиме только чтение
    (так работают специализированные дистрибутивы, например в маршрутизаторах)

    В режиме только чтение все каталоги, в которые обычно 
    записываются данные приложений и сервисов во время работы монтируются 
    в оперативную память (например каталог /var/log и т.п.)
    Данные актуальны только для текущего сеанса работы и после сброса питания
    данные теряются.

    Если в Yocto Project вы укажете при сборке использовать "read only", 
    то после сборки ваш дистрибутив будет настроен только на чтение, 
    но вы всегда можете добавить возможность динамического перевода 
    из "read only"  в "read/write", но это уже совсем другая история ...
    

Và một nhược điểm chính:

“Nó phải được thực hiện” tức là Tôi cần dành N số buổi tối
(thường là sau giờ làm việc, và đây là thời điểm kém hiệu quả nhất, lúc này não không còn suy nghĩ nữa, thường là ngủ)

Chưa hết, tôi đã viết bài trước trên Habré về trung tâm đa phương tiện Kodi và Yocto dự án
và cơ hội tiếp tục theo hướng tương tự đã lấn át động lực nghiên cứu của tôi. Thông tin thêm về điều này trong chương tiếp theo.

Biến Kodi thành loa radio Internet

Để thêm chức năng tôi cần, tôi sẽ thêm một phương thức nữa vào công thức xây dựng bản phân phối được mô tả ở phần trước Bài viết xem tập tin berserk-image.bb

GUI_SETTINGS = "home/root/.kodi/userdata/guisettings.xml"

# конфигурация запуска последнего выбранного ТВ канала (1-фон 2-передний план)
F1_LINE = "<startlast default="true">0</startlast>"
R1_LINE = "<startlast>1</startlast>"
# конфигурация вывода звука, всегда подключен только аналоговый аудио выход
F2_LINE = "<audiodevice default="true">PI:HDMI</audiodevice>"
R2_LINE = "<audiodevice>PI:Analogue</audiodevice>"
# так как HDMI по умолчанию не используется отключаю автоматическое обновление
# а то может получиться что питание уехало, а данные остались не записанными
F3_LINE = "<addonupdates default="true">0</addonupdates>"
R3_LINE = "<addonupdates>2</addonupdates>"


# метод отвечает за добавление конфигурации:
# которая превращает "Умный телевизор" в "простую Интернет Радио колонку"
add_radio_guisettings() {
    sed -i "s|${F1_LINE}|${R1_LINE}|" ${IMAGE_ROOTFS}/${GUI_SETTINGS}
    sed -i "s|${F2_LINE}|${R2_LINE}|" ${IMAGE_ROOTFS}/${GUI_SETTINGS}
    sed -i "s|${F3_LINE}|${R3_LINE}|" ${IMAGE_ROOTFS}/${GUI_SETTINGS}
}


FIND_STR = "touch ./tmp/.FIRST_RUN."
SCRIPT_FIRST_RUN = "etc/init.d/first-run.sh"
# так как HDMI выход может не использоваться, 
# то необходимо отключить "стартовое приветствие"
off_kodi_welcome() {
    sed -i "s|${FIND_STR}|#&|" ${IMAGE_ROOTFS}/${SCRIPT_FIRST_RUN}
}

Các phương pháp này nhằm mục đích sửa đổi hệ thống tệp gốc trước khi hình thành hình ảnh phân phối dưới dạng một tệp thô, được ghi vào thẻ nhớ bằng lệnh dd

Việc này được thực hiện theo cách này:
ROOTFS_POSTPROCESS_COMMAND += "add_radio_guisettings; off_kodi_welcome;"

Tóm lại trong file cấu hình chính của Kodi 17.6 có “ba điểm” thay đổi

  • Cấu hình khởi chạy kênh TV được chọn gần đây nhất;
  • Cấu hình đầu ra âm thanh, chỉ đầu ra âm thanh analog luôn được kết nối;
  • Vô hiệu hóa cập nhật tự động;
  • Lưu ý:
        Единственное с чем у меня возникли сложности, 
        это то, что пришлось еще подтащить файл базы данных 
        в формате sqlite => TV29.db, в котором указывается 
        текущий проигрываемый ТВ канал 
        (так как по умолчанию никакой из каналов не выбран), 
        а через xml конфигурацию в Kodi этого не сделать.
        

trình tự hành động chi tiết hơn cho từng mục:

1) Nhấp vào biểu tượng bánh răng ở góc trên bên trái màn hình
và chọn “Cài đặt PVR và TV” (hình ảnh TV có hai còi)
sau đó ở phía bên trái của menu, chọn “Phát lại” và ở phần trung tâm “Chung”
chọn “Tiếp tục từ kênh cuối cùng khi khởi động” trong danh sách thả xuống
chọn cài đặt "Tiền cảnh"

hoặc rõ ràng hơn:

      "Настройки PVR и ТВ" 
       => "Воспроизведение" 
       => "Продолжить с последнего канала при запуске" => "Передний план"

2) Click vào biểu tượng “bánh răng” ở góc trên bên trái màn hình và chọn mục:

       "Системные настройки"  
       => "Дополнения" => "Обновления" => "Никогда не проверять обновления"

3) Click vào biểu tượng “bánh răng” ở góc trên bên trái màn hình và chọn mục:

       "Системные настройки" 
       => "Аудио" => "Устройство вывода звука" => "PI: Analogue"

Làm thế nào tôi đã xem TV sai cách trong hai năm.

Tôi phải thú nhận với bạn rằng suốt hai năm qua tôi vẫn chưa học được cách xem TV đúng cách.

Tôi thường xem TV trong nhà bếp. Một bo mạch Raspberry Pi 2B được kết nối với TV, đồng thời các đầu nối Ethernet và HDMI được kết nối với bo mạch. Bo mạch được cấp nguồn thông qua cáp USB thông thường, được cắm vào cổng USB của TV, tức là. trên thực tế, việc bật TV bằng điều khiển từ xa tiêu chuẩn sẽ cấp nguồn cho bo mạch Raspberry Pi và việc tắt TV từ điều khiển từ xa cũng ngay lập tức đặt lại nguồn điện từ bo mạch Raspberry Pi.

Có, tôi biết rõ rằng điều này không thể thực hiện được vì hệ thống tệp gốc của trung tâm truyền thông Kodi (ext3) hoạt động ở chế độ đọc/ghi bình thường. Nhưng tôi là một người lười biếng, và trước tiên tôi quyết định kiểm tra xem mình có thể tắt hệ thống như thế này trong bao lâu, cho đến khi nó ngừng tải hoàn toàn, nhưng thật không may, sau hai năm tôi chưa bao giờ làm được điều này (có lẽ tôi chỉ may mắn thôi, Tôi không biết ).

Và theo ý kiến ​​​​của tôi, nếu chế độ này phù hợp với TV của tôi, thì nó cũng sẽ phù hợp với “loa Internet Radio đơn giản” và vì tôi đã buộc phải tắt tính năng tự động cập nhật các plugin Kodi nên khả năng xảy ra lỗi hệ thống tệp sẽ trở nên thậm chí ít hơn. Cho đến nay tôi không thấy có vấn đề gì với điều này

Lưu ý:

    Но вы всегда при желании можете с помощью одной yocto команды 
    IMAGE_FEATURES += "read-only-rootfs"

    и определенной магии перевести ваш дистрибутив в режим "read only"
    

Bản phân phối “loa radio Internet” được mô tả trong bài viết là bản phân phối dành cho hộ gia đình và điều quan trọng nhất đối với bản phân phối dành cho hộ gia đình là một GUI đẹp mắt. Theo tôi, rất khó hoặc gần như không thể dạy một người dùng bình thường nhập bất kỳ lệnh ma thuật khó hiểu nào vào bảng điều khiển và anh ta thậm chí còn không biết từ đó. Nhưng xin vui lòng sử dụng GUI.

Và đây có lẽ là lập luận chính của tôi ủng hộ việc phân phối không có bảng điều khiển. Giao diện người dùng đồ họa đèn ấm của Kodi, nó không thực sự cần thiết, nhưng nó có ở đó.
(Tôi cũng hoàn toàn quên đề cập rằng Kodi có thể được điều khiển từ xa, chẳng hạn như từ điện thoại thông minh, bằng cách cài đặt ứng dụng Yatse và có lẽ đối với một số người, đây sẽ là một điểm cộng)

Cấu hình Kodi để điều khiển chuột

và bây giờ là tên lửa

<keymap>
    <global>
        <mouse>
          <wheelup>VolumeUp</wheelup>
          <wheeldown>VolumeDown</wheeldown>
          <middleclick>ChannelDown</middleclick>
          <longclick id="0">ChannelDown</longclick>
          <longclick id="1">ChannelUp</longclick>
          <!-- конфигурационный rocket -->
        </mouse>
    </global>
</keymap>

Cấu hình ghi đè các sự kiện chung cho các thành phần sau:

  • cuộn bánh xe chuột về phía trước
  • cuộn bánh xe chuột trở lại
  • nhấn chuột giữa
  • xử lý các cú nhấp chuột dài (3 giây trở lên),
    0 ID nút phải, 1 ID nút trái

Thông tin chi tiết hơn về thiết lập sự kiện chuột:

kodi.wiki/view/Alternative_keymaps_for_mice
kodi.wiki/view/Action_IDs
kodi.wiki/view/Window_IDs

Phải làm gì nếu hệ thống cáp không đến với bạn

“Nhưng tôi không có cổng Ethernet miễn phí ở nhà (hoặc chưa bao giờ có chúng)”, một số chủ sở hữu bo mạch Raspberry Pi 1 cũ vui vẻ có thể thốt lên (có lẽ bo mạch này được mua để nghiên cứu và vẫn nằm trên tủ)

Và vì bo mạch không có Wifi tích hợp nên nó sẽ không hoạt động tốt nếu không có kết nối Ethernet.

Tất nhiên, có thể sử dụng bo mạch Raspberry Pi 1 mà không cần Ethernet, nhưng việc này sẽ đòi hỏi bạn phải nỗ lực một chút. Thông thường, những điều thú vị như vậy chỉ được thực hiện như một phần của việc học một điều gì đó mới, tức là. Đây không phải là công việc tùy chỉnh.

Vì vậy, hãy xem xét trường hợp sử dụng giả định cho bo mạch không có Ethernet:

Bạn có thể kết nối bộ chuyển đổi USB - Wifi bên ngoài, được hướng dẫn xem xét
rằng bộ điều hợp sẽ hoạt động tốt trong Linux

Lưu ý:

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

    я проверял только следующии модели:
    - WiFi адаптер на чипсете Atheros D-Link DWA-126 802.11n (AR9271)
    - WiFi адаптер NetGear WNDA3200
    - WiFi адаптер NetGear WNA1100
    - WiFi адаптер TP-Link TL-WN722N (AR9271)
    - WiFi адаптер TL-WN322G v3
    - WiFi адаптер TL-WN422G
    - Wifi адаптер Asus USB-N53 chipset Ralink RT3572 
    

Nếu đã có bộ chuyển đổi USB Wifi, bạn có thể kiểm tra xem nó có hoạt động tốt trên Linux hay không bằng cách sau:

  • Cài đặt một số bản phân phối Linux được sử dụng rộng rãi
    mục đích chung, ví dụ "Máy tính để bàn Ubuntu"
  • Khởi động hệ thống
  • Kết nối bộ chuyển đổi USB Wifi của bạn
  • Khởi chạy trình quản lý mạng và thử kết nối với điểm truy cập WiFi của bạn
  • Nếu mọi thứ hoạt động tốt và kết nối Internet của bạn ổn định thì bộ điều hợp của bạn được hỗ trợ tốt và bạn có thể tiếp tục công việc kết nối bộ điều hợp này trong một bản phân phối chuyên biệt và có thể với các phiên bản khác của kernel
    (nếu không thì không, than ôi, tốt hơn hết là đừng thử)

Hỗ trợ bộ điều hợp Wifi ngoài trong Raspberry PI

Để bộ điều hợp WiFi hoạt động chính xác trong Linux, chúng ta cần hai thứ:
1) Hỗ trợ nhân Linux cho bộ điều hợp Wifi cụ thể
2) Sự hiện diện của mô-đun hạt nhân trong hệ thống dành cho bộ điều hợp Wifi cụ thể

Lấy ví dụ bộ chuyển đổi TP-Link TL-WN722N. Nó có một ăng-ten đơn giản là tuyệt vời.
Hãy tìm chipset mà bo mạch hoạt động - đối với tôi đó là "AR9271", ghi chú:

    что самое интересное, это то, что для одной и той же модели
    одного и того же производителя, чипсет Wifi может отличаться.
    Я например сталкивался с тем, что для TL-WN722N версии 2, 
    используется уже другой чипсет Realtek RTL8188, а он уже 
    плохо работал под Linux (на тот момент), увы такие вот дела, 
    т.е. иногда нужно еще приглядываться к маленьким цифрам 
    версии на обратной (темной) стороне адаптера.    
    

Bây giờ chúng ta cùng tìm tên tham số trong cấu hình kernel chịu trách nhiệm về driver chipset AR9271, tốt nhất nên tìm tổ hợp từ “AR9271 catee.net”
     trong đó "cateee.net" là một trang web thú vị mô tả cấu hình của các mô-đun hạt nhân Linux

Chúng tôi tìm thấy ngay tên của cấu hình kernel - CONFIG_ATH9K_HTC
và tên của mô-đun hạt nhân chúng ta cần ath9k_htc

và sau đó chỉ cần chỉ định tên của mô-đun được yêu cầu trong tệp đoạn cấu hình
Linux kernel => công thức nấu ăn-kernel/linux/files/rbpi.cfg, thêm dòng:
CONFIG_ATH9K_HTC=m

Do đó, trong tương lai, bạn có thể kết nối bất kỳ thiết bị bổ sung nào với hệ thống của mình (tất nhiên, nếu nó đã được hỗ trợ trong nhân Linux)

Phải làm gì nếu bạn là một người đam mê habra - nhà thiết kế

Và bạn tạo ra những thứ tuyệt vời nhất, chẳng hạn như đây hoặc bạn là sinh viên và mơ ước tạo ra thứ gì đó tương tự.

Chỉ cần nhanh chóng, bạn có thể lấy một số loại Màn hình cảm ứng cho RPI trên AliExpress, đặt mua pin phù hợp ở đó, kết nối tất cả với bo mạch Raspberry Pi 1,2 hoặc 3 (tốt nhất là 3, vì nó có tích hợp Wifi), chọn giao diện chủ đề thiết kế đồ họa trong Kodi, được thiết kế cho màn hình cảm ứng và thì đấy => bạn có thể có một trình phát âm thanh đơn giản. Tất nhiên nó sẽ khá cồng kềnh nhưng nó sẽ là của bạn.

  Примечание:
  A для того, чтобы собрать Мультимедиа центр Kodi для самой бюджетной платы 
  Raspberry Pi Zero Wifi в yocto вам достаточно изменить две строки:

  конфигурационный файл => build/conf/local.conf
      MACHINE = 'raspberrypi0-wifi'

  рецепт сборки Kodi  => recipes-mediacentre/kodi/kodi_17.bbappend
      EXTRA_OECONF_append = "${@bb.utils.contains('MACHINE', 
                            'raspberrypi0-wifi', '${BS_RPI}',  '', d)}"

  Nếu khả năng phản hồi của GUI Kodi 17.6 do lõi xử lý đơn trong Zero có vẻ bí ẩn đối với bạn, thì bạn có thể đánh lừa đôi tai của mình và xây dựng một phiên bản cũ hơn nhưng rất nhanh, chẳng hạn như Kodi 15.2, về mặt này thì nó “thân thiện” hơn (đôi khi di sản giải quyết mọi thứ)

Thật không may, tôi không có bảng nên không thể kiểm tra, nhưng tôi cảm thấy nó sẽ hoạt động.

Hướng dẫn lắp ráp ngắn gọn

    1) Установите зависимости Yocto Project (например в Ubuntu): 
    sudo apt-get install -y --no-install-suggests --no-install-recommends 
        gawk wget git-core diffstat unzip texinfo gcc-multilib build-essential 
        chrpath socat cpio python python3 python3-pip python3-pexpect 
        xz-utils debianutils iputils-ping python3-git python3-jinja2 
        libegl1-mesa libsdl1.2-dev xterm

    2) Скачайте и установите Repo:
        mkdir ~/bin
        curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
        chmod a+x ~/bin/repo

    3) Загрузите проект с github:
        PATH=${PATH}:~/bin
        mkdir radio
        cd radio
        repo init -u https://github.com/berserktv/bs-manifest 
                  -m raspberry/rocko/radio-rpi-0.2.8.xml
        repo sync

    4) Соберите проект:
        ./shell.sh
        bitbake berserk-image
        
    можно тоже самое собрать для плат Raspberry Pi 3B Plus, 3B и 2B:
    repo init -u https://github.com/berserktv/bs-manifest 
              -m raspberry/rocko/radio-0.2.8.xml
    

hướng dẫn lắp ráp chi tiết hơn
và ghi vào thẻ nhớ microSDHC, xem trong bài viết trước

tái bút

Tất nhiên, ý tưởng về một chiếc loa radio Internet là điển hình, mọi người đều biết điều đó và trên Habré bạn sẽ tìm thấy nhiều bài viết về chủ đề này chẳng hạn đây

Và bạn cũng có thể nghĩ rằng tôi chỉ đơn giản điều chỉnh các yêu cầu cho phù hợp với một giải pháp có sẵn. Về điều này, tôi có thể phản đối và nói rằng không, một cách trung thực.

Câu chuyện của ông Ervey

    Хотите верьте, хотите нет, а дело было так:

    Наш рабочий офис граничит с фирмой по производству разного звукового
    оборудования, и однажды директор этой фирмы, назовем его мистер "Эрви"
    подошел к нашему заместителю директора филиала мистеру "Арсению"
    и спросил у него, насколько сложно повесить на плату Raspberry Pi 
    проигрывание звукового потока т.е. плата подключается к сети 
    и колонкам, и "слышен характерный звук".

    После этого мистер Арсений подошел к заместителю моего 
    начальника - мистеру "Борису" и переадресовал вопрос ему, 
    ну а я, как сторонний наблюдатель случайно эту идею запомнил
    и назвал ее "Задача трех начальников".

    В общем хотели как лучше, 
    а получилось, цитата - "Но мистер Эрви, как всегда, помог."

    Через некоторое время я поинтересовался у мистера "Бориса" 
    его мнением по поводу написания небольшой заметки на эту тему 
    на "Хабре", на что "Борис" ответил, что изменение 
    "трех пунктов меню" в Kodi, особо не привносит никакой 
    новой информации и не заслуживает отдельного упоминания. 
    Конечно я с ним полностью согласен и поэтому, я не расскажу ему, 
    что что-то написал по этому поводу.

    Статья написана исключительно для платы "Raspberry Pi 1" 
    взятой у мистера "Бориса" на время эксперимента, 
    совпадения со всеми другими платами "Raspberry Pi 1" случайны.
    

Nhiều buổi hội họp hay và khác biệt hơn dành cho bạn, và hãy để ngay cả viên gạch cũ hát cho bạn nghe trong năm nay.

Nguồn: www.habr.com

Mua dịch vụ lưu trữ đáng tin cậy cho các trang web có bảo vệ DDoS, máy chủ VPS VDS 🔥 Mua dịch vụ hosting website đáng tin cậy với bảo vệ DDoS, máy chủ VPS VDS | ProHoster