投稿者「admin」のアーカイブ

DeskTopのSafariやiPadのSafariでmp4のvideoファイルの読込が遅い問題

DeskTopのSafariやiPadのSafariでmp4のvideoファイルの読込が遅い問題

<video> タグでmp4動画を再生させる場合基本ストリーミング再生できるのですが、DeskTopのSafariやiPadのSafariでできなかったのでその解決方法は、DescTopのSafariは”HLSを使って再生対応する”

手順

  1. 事前準備:動画のメタデータを先頭にもってくる。
  2. 動画ファイルをセグメント化(細かく分割)
  3. JSでHSL対応/非対応ごとに再生方法を記述

0.事前準備:動画のメタデータを先頭にもってくる。

ffmpegでメタデータを先頭にもってきます。
メタデータ:動画の長さetcが後方にある場合は読込が重くなるため(Safariに限らず)

$ ffmpeg -i input.mp4 -codec copy -movflags faststart output.mp4

1.動画ファイルをセグメント化(細かく分割)

ffmpegで分割します。

ffmpeg -i input.mp4 -c:v copy -c:a copy -f hls -hls_time 9 -hls_playlist_type vod -hls_segment_filename "output%3d.ts" output.m3u8
  • m3u8ファイル(output.m3u8)は、分割されたファイルの再生順などが記載されたテキストファイル
  • 分割ファイル(output{xxx}.tsは分割された動画ファイル

2.JSでHSL対応/非対応ごとに再生方法を記述

2–1.HLS対応のライブラリを読込ます。

    <script src="https://cdn.jsdelivr.net/npm/hls.js@latest"></script> </head>

2–2.videoタグにHLS対応/非対応両方のsrcをdatasetとして記述

<video 
    id="video" 
    data-src="./assets/video/output.mp4" //HLS非対応用
    data-src-hls="./assets/video/output.m3u8" //HLS用
>
</video> 

2–3.JSで分岐処理

それぞれ再生方法を処理する。

if(Hls.isSupported()) { //HLS対応
    var hls = new Hls();
    hls.loadSource(video.dataset.srcHls);
    hls.attachMedia(video);
}else{                  //HLS非対応
    video.src = video.dataset.src;
}
video.play();

2–4.ソース全体像

<!DOCTYPE HTML>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>タイトル</title>
    <script src="https://cdn.jsdelivr.net/npm/hls.js@latest"></script> </head>
<body>
<video 
    id="video" 
    data-src="./assets/video/output.mp4"
    data-src-hls="./assets/video/output.m3u8">
</video> 
<script>
var video = document.querySelector('#video'); 
if(Hls.isSupported()) {
    var hls = new Hls();
    hls.loadSource(video.dataset.srcHls);
    hls.attachMedia(video);
}else{
    video.src = video.dataset.src;
}
video.play();
</script>
</body>
</html>

PHPStormでHTMLのClass属性からSASSのソースへジャンプできなくなった

PHPStormでHTMLのClass属性からSASSのソースへジャンプできなくなった。

なぜかコンパイル後のCSSへしかジャンプできなくなった。
コンパイル後のCSSファイルのファイルタイプを“PlainText”にすると、SASSのソースに飛ぶようになりました。

対象ファイルを右クリック
対象ファイルを右クリック
PlainTextに
PlainTextに

Vue3/Vue.js 親コンポネントから子コンポネントのメソッド呼び出し

Vue3/Vue.js 親コンポネントから子コンポネントのメソッド呼び出し

//親コンポネント
<script>
    .
    .
    methods: {
        onPlay(){
            this.$refs.player.play();
        }
    }

    .
    .
</script>
<template>
    <Player ref="player"></Player>
    <button type="button" @click="onPlay">PLAY</button>
</template>

-------------------------------------------------------

//子コンポネント
<script>
    .
    .
    methods: {
        play(){
            document.querySelector('#video').play();
        }
    }

    .
    .
</script>
<template>
    <div>
        <video id="video" src="video.mp4" />
    </div>
</template>

Laravel8のsail SequelProでmysql8に接続する方法

Laravel8のsail SequelProでmysql8に接続する方法

Laravel8のsailはmysql8で、SequelProだと、caching_sha2_passwordで接続できませんと怒られる。

SequelProが’caching_sha2_password’に対応していないので’mysql_native_password’を利用するように設定してあげる

$ ./vendor/bin/sail up //サーバーUP
$ mysql -u root -ppassword --host="127.0.0.1"   //mysqlに入る
mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'password';   //mysql_native_passwordに変更

[Chia Network]のマイニング方法ざっくり(win/macもアプリで簡単)

1.Chia Network へアクセス

https://www.chia.net/

2.マイニング用アプリをダウンロード

環境に合わせてアプリをダウンロード
環境に合わせてアプリをダウンロード

3.アプリをインストール/起動/秘密鍵を新規作成

右上で言語選べます。
右上で言語選べます。

4.秘密鍵を控えて次へ

(ダッシュボードが表示されます。)

5.耕地を追加

6.設定:

1.耕地容量を選択

左の数字が、最終的に保存される容量(HDDなどへ)、※()内の数字がテンポラリ(一時)ファイル(高速なSSDなどがよい)なのでこの容量溢れないように注意が必要です。

2.耕地数を選択

こちらは詳細な動作/設定が難しくなりそうなので、デフォルトの[耕地をキューに追加]を選びました。

3.一時ファイルのディレクトリを選択

高速なSSDの方が処理が早く済みそうで、私は内蔵のSSDを選択しました。
適当に自分でchia_tmpのようなフォルダを作りました。

4.最終ディレクトリを選択

こちらは永続的に保存が必要になりそうなので、外付けで専用のHDDを指定しました。
フォルダ名は適当にchia_finalとしました。

5.耕地を作るボタンを押して完了

7.マイニング(耕し)開始

あとは、耕しが始まり進捗状況が表示されるのでじっとまちます。

絶賛耕し中!!

なので、実際耕してその後の取引などは随時更新していきたいと思います。

AOS(Animate On

AOS(Animate On Scroll Library)をLaravelMixで使う。

devにインストール

$ npm install aos --save-dev

sassでCSS組み込み(.cssを付けなければインライン展開される)

@import "~aos/dist/aos";

jsで、window.AOSにrequireする

window.AOS = require('aos');

DomLoad後にinitする。

document.addEventListener('DOMContentLoaded', function () {
    AOS.init();
});

WordPressのグーテンベルク(gutenberg)エディタでブロックの追加させない方法

WordPressのグーテンベルク(gutenberg)エディタでブロックの追加させない方法

Advanced Custom Fieldsなどで投稿タイプごとに入力フィールドをカスタマイズしている場合に、グーテンベルクのブロック追加が不要の時があり、それを表示させない方法

結論(これは最適解か微妙でもっと良い方法ある?)的に、許可するブロックのタイプを無しにすると表示されなくなる。(allowed_block_typesフィルター利用)

以下の例は、‘rent’,’property’のポストタイプを除外

function allowed_block_types( $allowed_block_types ) {
    global $post_type;
    if(in_array($post_type,['rent','property'])){
        return [];
    }
}
add_filter( 'allowed_block_types', 'allowed_block_types' );

WordPressのグーテンベルクのブロックエディタ/管理画面に独自スタイルの追加方法

WordPressのグーテンベルクのブロックエディタ/管理画面に独自スタイルの追加方法

functions.phpで読み込むCSSを指定する.
以下はpost_typeで特定のカスタムポストのみに設定

/**
 * 管理画面に追加のスタイル
 */
function enqueue_gutenberg() {
    global $post_type;
    if(!in_array($post_type,['rent','property'])){
        return;
    }
    wp_register_style( 'my-gutenberg', get_stylesheet_directory_uri() . '/css/editor.css' );
    wp_enqueue_style( 'my-gutenberg' );
}
add_action( 'enqueue_block_editor_assets', 'enqueue_gutenberg' );