Anleitung - Eigene Video und Live Plattform erstellen


INSTALL AVideo(YouPHPTube) on Ubuntu 18.04 LTS (complete)



-----------------------------------------------
Server: 4 Kernel, 8 Gig Ram, or more, VPS oder dedicated Server)
-----------------------------------------------

Quelle / Source / Info über das System
  • AVideo on Github
  • AVideo Demo
  • AVideo Info


  • -> Install Ubuntu 18.04 minimal (no Webserver)

    1.
    # apt update && apt upgrade
    # apt dist-upgrade
    # apt install htop mc



    2.
    Set Hostname:
    # hostnamectl
    # hostnamectl set-hostname 'Your Hostname'
    # mcedit /etc/hosts (edit)
    # reboot
    test: # hostnamectl
    Test: # hostname



    3.
    Apache webserver:
    # sudo apt install -y apache2 apache2-utils
    # systemctl status apache2
    # sudo systemctl start apache2
    # sudo systemctl enable apache2
    # apache2 -v
    # sudo chown www-data:www-data /var/www/html/ -R



    4.
    MariaDB:
    # sudo apt install mariadb-server mariadb-client
    # systemctl status mariadb
    # sudo systemctl start mariadb
    # sudo systemctl enable mariadb
    # sudo mysql_secure_installation
    ----------------------------
    Set your MariaDB root Password and save:
    MariaDB Daten:
    User: root
    Passwort: 'your secure password'
    ----------------------------
    Test:
    # sudo mariadb -u root
    # exit;
    # mariadb --version



    5.
    PHP7.2:
    # sudo apt install php7.2 libapache2-mod-php7.2 php7.2-mysql php-common php7.2-cli php7.2-common php7.2-json php7.2-opcache php7.2-readline
    # sudo a2enmod php7.2
    # sudo systemctl restart apache2
    # php --version


    # reboot



    6:
    YouPHPTube:
    cd /var/www/html/
    # sudo apt install git
    # sudo git clone https://github.com/WWBN/AVideo.git
    # cd AVideo/
    # sudo git clone https://github.com/WWBN/AVideo-Encoder.git
    # sudo mv AVideo-Encoder upload
    # cd /var/www/html/
    # sudo mv AVideo tube
    # sudo chown www-data:www-data /var/www/html/tube/ -R



    7.
    Streamer & Encoder:
    # sudo apt install ffmpeg
    # sudo apt install libimage-exiftool-perl
    # sudo apt install php7.2-cli php7.2-common php7.2-json php7.2-opcache php7.2-readline php7.2-curl php7.2-gd php7.2-xml



    8.
    youtube.dll:
    # sudo apt install python3-pip
    # sudo -H pip3 install youtube-dl
    # sudo crontab -e
    # @daily sudo -H pip3 install --upgrade youtube-dl > /dev/null
    -----------------------------------
    oder, wenn Problem:
    # apt-get install python-pip
    # pip install youtube-dl
    ----------------------------------
    # service cron status
    # service cron stop
    # service cron start



    9.
    Edit MariaDB:
    # sudo mcedit /etc/mysql/mariadb.conf.d/50-server.cnf

    # Unter InnoDB einfügen:
    # (Read the manual for more InnoDB ...)

    innodb_file_format = Barracuda
    innodb_file_format_max = Barracuda
    innodb_file_per_table = ON
    innodb_default_row_format = dynamic
    innodb_large_prefix = ON

    # sudo systemctl restart mariadb
    Test:
    # mariadb -u root
    exit;



    10.
    Setub Database:
    # mariadb -u root

    Tube:
    # create database Tube;
    # create user Tube@localhost identified by 'dein_passwort';
    #### (mit denen schreiben: '')
    # grant all privileges on Tube.* to Tube@localhost;

    Tube-Encoder:
    # create database TubeEncoder;
    # create user TubeEncoder@localhost identified by 'dein_passwort';
    #### (mit denen schreiben: '')
    # grant all privileges on TubeEncoder.* to TubeEncoder@localhost;

    # flush privileges;
    # exit;



    11.
    Apache Hosts:

    your_domain.com (Server-root)
    # sudo mcedit /etc/apache2/sites-available/your_domain.com.conf
    
        ServerName your_domain.com
        DocumentRoot /var/www/html
    
        
           DirectoryIndex index.html index.htm index.php
           Options +FollowSymLinks
           AllowOverride All
           Require all granted
        
    
        ErrorLog ${APACHE_LOG_DIR}/your_domain.com.error.log
        CustomLog ${APACHE_LOG_DIR}/your_domain.com.access.log combined
    
    


    Tube Host:
    # sudo mcedit /etc/apache2/sites-available/tube.conf
    
        ServerName www.your_domain.com
        DocumentRoot /var/www/html/tube
    
        
           DirectoryIndex index.php
           Options +FollowSymLinks
           AllowOverride All
           Require all granted
        
    
        ErrorLog ${APACHE_LOG_DIR}/tube.error.log
        CustomLog ${APACHE_LOG_DIR}/tube.access.log combined
    
    

    Encoder Host:
    # sudo mcedit /etc/apache2/sites-available/tube-encoder.conf
    
        ServerName upload.your_domain.com
        DocumentRoot /var/www/html/tube/upload
    
        
           DirectoryIndex index.php
           Options +FollowSymLinks
           AllowOverride All
           Require all granted
        
    
        ErrorLog ${APACHE_LOG_DIR}/tube-encoder.error.log
        CustomLog ${APACHE_LOG_DIR}/tube-encoder.access.log combined
    
    


    # sudo a2ensite your_domain.com.conf
    # sudo a2ensite tube.conf
    # sudo a2ensite tube-encoder.conf

    # sudo a2enmod rewrite
    # sudo systemctl restart apache2

    # sudo a2dissite 000-default.conf
    # sudo systemctl restart apache2



    12.
    Cerbot:
    # sudo apt install certbot
    # sudo apt install python3-certbot-apache

    # sudo certbot --apache --agree-tos --redirect --hsts --staple-ocsp --email your_name@hotmail.com -d yourdomain.com
    # sudo certbot --apache --agree-tos --redirect --hsts --staple-ocsp --email your_name@hotmail.com -d www.yourdomain.com
    # sudo certbot --apache --agree-tos --redirect --hsts --staple-ocsp --email your_name@hotmail.com -d upload.yourdomain.com



    13.
    Tube install:
    www.your_domain.com
    - follow instructions, edit php.ini.
    # /etc/init.d/apache2 restart

    Tube-Encoder install:
    upload.yoour_domain .com
    - follow instructions, edit php.ini.
    # /etc/init.d/apache2 restart

    -->> Check the extensions and install all database tables (red market) !



    #####################################################
    ############## Now the Live #########################
    #####################################################



    14.
    nginx-rtmp:
    # sudo apt-get install -y build-essential libpcre3 libpcre3-dev zlib1g zlib1g-dev libssl-dev php7.2-xml
    # sudo mkdir ~/build && cd ~/build && sudo git clone git://github.com/arut/nginx-rtmp-module.git
    ( fix: sudo git clone https://github.com/arut/nginx-rtmp-module.git )
    # sudo wget http://nginx.org/download/nginx-1.16.1.tar.gz && sudo tar xzf nginx-1.16.1.tar.gz

    cd nginx-1.16.1
    # sudo ./configure --with-http_ssl_module --with-http_stub_status_module --add-module=../nginx-rtmp-module
    # sudo make && sudo make install

    # sudo mkdir /usr/local/nginx/ssl/ && sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /usr/local/nginx/ssl/nginx.key -out /usr/local/nginx/ssl/nginx.crt

    # sudo /etc/init.d/apache2 restart && sudo mkdir /HLS && sudo mkdir /HLS/live

    # cd /usr/local/nginx/html && wget https://youphptube.com/docs/stat.xsl
    # sudo mv /usr/local/nginx/conf/nginx.conf /usr/local/nginx/conf/nginx.conf.old
    # cd /usr/local/nginx/conf/ && sudo wget https://raw.githubusercontent.com/DanielnetoDotCom/YouPHPTube/master/plugin/Live/install/nginx.conf

    # sudo mcedit /usr/local/nginx/conf/nginx.conf
    (Save the nginx.conf and look closely !!!)
    ###########################################################################
        worker_processes  1;
        error_log  logs/error.log debug;
        events {
                worker_connections  1024;
        }
        rtmp {
                server {
                        listen 1935;
                        allow play all;
                        #creates our "live" full-resolution HLS videostream from our incoming encoder stream and tells where to put the HLS video manifest and video fragments
                        application live {
                                allow play all;
                                live on;
                                #record all;
                                #record_path /video_recordings;
                                #record_unique on;
                                hls on;
                                hls_nested on;
                                hls_path /HLS/live;
                                hls_playlist_length 4s;
                                #hls_fragment 1s;
                                hls_fragment 2s;
                                on_publish http://your_ip/tube/plugin/Live/on_publish.php;
                                on_publish_done http://your_ip/tube/plugin/Live/on_publish_done.php;
                                on_play http://your_ip/tube/plugin/Live/on_play.php;
                                on_record_done http://your_ip/tube/plugin/Live/on_record_done.php;
                                recorder video{
                                record all;
                                record_path /var/www/tmp;
                                record_notify on;
                                record_max_size 2048M; 
                                #will produce files of the form yourUserKey-24-Apr-13-18:23:38.flv
                                record_suffix -%d-%b-%y-%T.flv;
                            }
                        }
    
                }
        }
       http {
                include       mime.types;
                default_type  application/octet-stream;
                server {
                        listen 8080;
                        server_name localhost;
                        #creates the http-location for our full-resolution (desktop) HLS stream - "http://my-ip/live/my-stream-key/index.m3u8"      
                        location /live {
                                # Disable cache
                                add_header 'Cache-Control' 'no-cache';
    
                                # CORS setup
                                add_header 'Access-Control-Allow-Origin' '*' always;
                                add_header 'Access-Control-Expose-Headers' 'Content-Length';
    
                                # allow CORS preflight requests
                                if ($request_method = 'OPTIONS') {
                                        add_header 'Access-Control-Allow-Origin' '*';
                                        add_header 'Access-Control-Max-Age' 1728000;
                                        add_header 'Content-Type' 'text/plain charset=UTF-8';
                                        add_header 'Content-Length' 0;
                                        return 204;
                                }
                                types {
                                        application/vnd.apple.mpegurl m3u8;
                                }
                                alias /HLS/live;
                        }
                        #allows us to see how stats on viewers on our Nginx site using a URL like: "http://my-ip/stats"     
                        #location /stats {
                        #        stub_status;
                        #}
                        location /stat {
                                rtmp_stat all;
                                rtmp_stat_stylesheet stat.xsl;
                        }
                        location /stat.xsl {
                                root html;
                        }
                        location /control {
                                rtmp_control all;
                        }
                        #allows us to host some webpages which can show our videos: "http://my-ip/my-page.html"     
                        location / {
                                root   html;
                                index  index.html index.htm;
                        }   
    listen 444 ssl;
    ssl_certificate /etc/letsencrypt/live/www.your_domain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/www.your_domain.com/privkey.pem;
                }
        }

    ###########################################################################
    Record:
    # mkdir /var/www/tmp/
    # chmod: 777
    # chown: www-data

    # sudo mcedit /etc/apache2/mods-available/proxy.conf
    inner Module:
    # ProxyPass /wss/ ws://127.0.0.1:8868/

    # sudo a2enmod proxy_wstunnel
    # sudo systemctl restart apache2



    15:
    Plugins
    - Install all Tables in Menue Plugins
    - Live Plugin:
    -> edit parameters:
    Player URL :
    https://www.your_domain.com:444/live
    Stats Page URL :
    https://www.your_domain.com:444/stat
    -->> 444 !!



    after each reboot you must start the nginx:
    # sudo /usr/local/nginx/sbin/nginx

    RTMP-Statistik:
    Check, if the rtmp is runnig:
    https://www.your_domain.com:444/stat