動画サイト的なもの作ってみた

| 2024/04/03 08:41:47 | 530 | cat:プログラミング |


動画サイト的なもの作ってみた

環境

  • OS : Ubuntu 22.04
  • WebServer : Apache 2.4.58
  • CGI : PHP 8.2.12
  • HTML : HTML Living Standard

0.設定

/etc/apache2/apache2.conf


        Options Indexes FollowSymLinks
        # AllowOverride None
        AllowOverride All
        Require all granted

.htaccess

AddType application/x-httpd-php .php .html
AddHandler application/x-httpd-php .php .html

php_value memory_limit 1000M
php_value post_max_size 1000M
php_value upload_max_filesize 1200M

1.HTML(UI)

とりあえず外側のHTMLを書いていきます。 index.html



    
        
        
        どーがさいと
    
    
        

どーがさいと


投稿

動画タイトル (14文字まで):
動画ファイル :
概要欄 (最大5行)


*Uploading may take some time for processing.

動画リスト

watch.php



    
        
        
        どーがさいと - <!-- 動画タイトル ここに設置 -->
    
    
        

概要欄



style.css

video{
    width: 50%;
    @media screen and (max-width: 480px) {
        width: 100%;
    }
}

pre{
    white-space: pre-wrap;
    font-size: x-large;
}

ul{
    display: flex;
    flex-wrap: wrap;
}

2.プログラム

cgi-binフォルダの中に書きます cgi-bin/videoPost.php 動画投稿プログラム

 70){redirectBackPage();}
    else if (strlen($title) > 14) {redirectBackPage();}
    $de_script_ion = str_replace("
", "", $de_script_ion); else if (count(explode("/",$de_script_ion)) > 5){return;} $filename = ""; $videoid = ""; // 動画IDをランダム生成 while (!file_exists($filename)){ $videoid = uniqid(rand(), true); $filename = "../videos/".$videoid.".mp4"; if (!file_exists($filename)){ break; } continue; } // 動画リストファイルに[動画ID,タイトル,投稿時間,IPのハッシュ値(ユーザーID的な?)]を書き込み $fp = fopen("../videos/videos.csv", 'ab'); if ($fp){ if (flock($fp, LOCK_EX)){ if (fputcsv($fp, [$videoid, str_replace("'", "\"", $title), date("Y/m/d H:i"), hash("fnv1a32", $_SERVER['REMOTE_ADDR']), $de_script_ion]) === FALSE){ echo '<_script_>alert("File write failed.");'; exit; } flock($fp, LOCK_UN); }else{ echo '<_script_>alert("File lock failed.");'; exit; } } else {exit;} // 動画ファイル書き込み $uploaded_path = realpath("../videos/mp4/")."/".$videoid.".mp4"; $result = move_uploaded_file($_FILES['upload_video']['tmp_name'],$uploaded_path); if(!$result){ echo "Upload Error : ".$_FILES['upload_video']['error']; exit; } // ffmpegでhls形式に変換しよう!(最後に&をつけることによってバックグラウンド実行) exec("ffmpeg -i ".$uploaded_path." -b:v 10M -c:a copy -f hls -hls_playlist_type vod -hls_time 10 -g 24 -hls_segment_filename \"".realpath("../videos/hls/")."/".$videoid."%3d.ts\" ".realpath("../videos/hls/")."/".$videoid.".m3u8 2> ".realpath("../logs")."/".$videoid.".log &"); // 前のページに戻る redirectBackPage();

cgi-bin/videoList.php 動画リストプログラム

";}
            foreach ($rows as $row){
                // 動画リスト出力
                $link = "watch?videoid=".$row[0];
                echo "
  • ".$row[2]."|".$row[3]."
    ".$row[1]; if(!file_exists("videos/hls/".$row[0].".m3u8") && !file_exists("videos/mp4/".$row[0].".mp4")){echo "(処理中)";} echo "
  • "; } echo ""; flock($fp, LOCK_UN); } else { echo '<_script_>alert("File lock failed.");'; } } fclose($fp);

    cgi-bin/watch.php 動画視聴プログラム

    alert("File lock failed.");';
            }
        } else {exit;}
    

    3.UIにも少しプログラムを追加

    index.html

    watch.php

    
    
        
        
        どーがさいと - <?=$row[1]?>
    
    
        

    概要欄


    <_script_> if(Hls.isSupported()) { var video = document.getElementById('hlsvideo'); var hls = new Hls(); hls.loadSource("videos/hls/.m3u8"); hls.attachMedia(video); }

    4.セットアップ

    mkdir videos videos/mp4 videos/hls logs
    touch videos/videos.csv
    sudo apt install unzip ffmpeg -y

    最後に

    とりあえずこれで完成かな? 今回のプログラムは完全練習のプログラムなので、いろいろ冗長化かも。


    solo-thudner

    RANK: Standard

    送られたステッカー🎁

    🎉

    応援ステッカーを送ろう🎉


    {まだ未搭載です}

    スポンサーリンク

    solo-thudner
    704 回視聴   2022/06/02 20:48:15
    プラグイン
    sonya4327JE(sonyakun)
    1576 回視聴   2022/04/07 06:36:07
    じぇ_り
    713 回視聴   2022/05/02 22:27:48
    プラグイン
    chikokunn
    2091 回視聴   2022/05/15 10:07:08
    その他
    cba8b0b4-3314-4626-a604-78bd3569e3f0
    720 回視聴   2022/08/16 19:29:14
    Mod
    TASTER
    3379 回視聴   2022/02/25 22:47:54
    Discord
    あけっちゃん
    6219 回視聴   2022/05/22 18:01:10
    nennneko5787 ◆NOrufLSRl.
    1159 回視聴   2022/04/16 08:58:49
    ニュース
    a900c401-aa91-4412-ae97-d6ef9f7f14fe
    715 回視聴   2022/06/09 18:31:47
    リドレイン
    714 回視聴   2022/06/01 19:50:08
    その他
    NEPTARUNE
    1331 回視聴   2022/03/21 19:07:38
    マッヒー
    1283 回視聴   2022/07/02 15:11:18
    2eefbd8e-d160-46f6-a0a8-13042c768775
    755 回視聴   2022/06/19 15:01:12