質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
CSS3

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

12338閲覧

Webサイトで動画のサムネイルを表示させたい(htmlのvideoタグ)

rms398

総合スコア50

CSS3

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2017/05/23 07:46

編集2017/05/23 12:52

###前提・実現したいこと
html javascript phpで動画をアップロードする機能を作っています。
動画をファイル選択またはドラッグアンドドロップすると動画のサムネイルが表示されるということをしたいのですが、表示されません
<video src="..." poster></video>のようにposterで動画の1フレーム目をサムネイル画像として表示させようとしてもサムネイルが表示されずじまいです。
videoタグが書かれているところはjavascriptの後半の$('#fileView').append...の行です
※cssによって表示されていない恐れがあるのでついでにcssもソースを出しときます

動画のサムネイルが表示されず

###該当のソースコード

javascript

1$(function(){ 2 //フォームデータを一時保存する配列 3 var formDataArray = []; 4 //画像の数を数える 5 var cnt = 0; 6 //inputによってファイルが読み込まれた時に呼ばれる 7 $('#file').on('change', function () { 8 //入力されたファイル取得 9 var files = this.files; 10 //読み込み処理 11 readFiles(files); 12 }); 13 //ドロップされた時に呼ばれる 14 $('#dropAria').on('drop', function (event) { 15 //デフォルトの動きを無効化 16 event.preventDefault(); 17 //ドラッグ&ドロップされたファイル取得 18 var files = event.originalEvent.dataTransfer.files; 19 //読み込み処理 20 readFiles(files); 21 }) 22 //ドロップ領域にはいった時に呼ばれる 23 .on('dragenter', function (event) { 24 //デフォルトの動きを無効化 25 event.preventDefault(); 26 }) 27 //ドロップ領域上にある間呼ばれる 28 .on('dragover', function (event) { 29 //デフォルトの動きを無効化 30 event.preventDefault(); 31 }); 32 //クリックした時にデータ送信 33 $('#upload').on('click',function(){ 34 formDataArray.forEach(function(formData){ 35 console.log(formData.get("file")); 36 if(formData.get("file")){ 37 uploadFiles(formData); 38 formData.delete("file"); 39 formData.delete("tag"); 40 } 41 42 }); 43 //画像を隠す 44 $('#fileView').hide(); 45 //選択ボタンを表示 46 $('#file').show(); 47 48 }); 49 var readFiles = function(files){ 50 //フォームデータを一時保存する配列 51 formDataArray = []; 52 //選択ボタンを隠す 53 $('#file').hide(); 54 //表示されているサムネイルを削除 55 $('.view-contaier').remove(); 56 //サムネイルを表示 57 $('#fileView').show(); 58 //filesはObjectなので配列に変換 59 //配列に対する処理が実行できるようにするため 60 var filesArray = Array.prototype.slice.call(files, 0, files.length); 61 //送るファイル全てに対してのループ処理 62 filesArray.forEach(function(file) { 63 var formData = new FormData(); 64 //フォームデータにkey:fileでファイルの関連付け 65 formData.append('file',file); 66 if(document.forms.form1.tagselect.value != '0'){ 67 //フォームデータにkey:tagでファイルの関連付け 68 formData.append('tag',document.forms.form1.tagselect.value); 69 console.log(formData.get('tag')); 70 }else{ 71 formData.append('tag',null); 72 } 73 //フォームデータをフォームデータ一時保存配列に保持 74 formDataArray.push(formData); 75 //FileReaderのインスタンス作成 76 var reader = new FileReader(); 77 //読み込み処理を行った際、一度だけ実行 78 $(reader).one('load',function(event){ 79 //MIMEタイプの最初から5文字取得 imageとvideoとその他を分けるため 80 var type = file.type.slice(0,5); 81 if(!(type == 'video')){ 82 window.alert('動画以外の形式です、動画をアップロードしましょう。'); 83 formData.delete('file'); 84 if(cnt == 0){ 85 //画像を隠す 86 $('#fileView').hide(); 87 window.alert('動画は何もありませんでした'); 88 //選択ボタンを表示 89 $('#file').show(); 90 } 91 }else{ 92 cnt++; 93 console.log('通りましたよ'); 94 //fileViewに動画追加 95 //サムネイル風になる 96 $('#fileView').append('<div class="view-contaier"> <div> <video src="' + event.target.result + '" poster></video></div> <span> 動画 </span> </div>'); 97 } 98 }); 99 //DataURLでファイルを読み込む 100 reader.readAsDataURL(file); 101 //アップロード処理 102 //uploadFiles(formData); 103 }, this); 104 } 105 var uploadFiles = function(formData){ 106 //ajaxで送信 107 $.ajax({ 108 //POSTで送信 109 type: 'POST', 110 //ajaxが適切なcontentTypeに自動変換するのを防ぐ 111 contentType: false, 112 //データを文字列に自動変換するのを防ぐ 113 processData: false, 114 //送信先 115 url: './upload.php', 116 //送るデータ 117 data: formData, 118 //通信成功時に呼ばれる 119 //data 接続先PHPファイルが出力したデータ 120 success: function(data,dataType) { 121 console.log("成功" +data); 122 }, 123 //通信失敗時に呼ばれる 124 //XMLHttpRequest.status HTTPステータス 125 //textStatus timeout、error、parsererror等の文字列 126 //errorThrown 例外情報 127 error: function(XMLHttpRequest, textStatus, errorThrown){ 128 console.log(XMLHttpRequest + " : " + textStatus + " : " + errorThrown); 129 } 130 }); 131 132 } 133 134});

php

1<?php 2 require_once(dirname(__FILE__)."/DBManager.php"); 3 $nursery_school_id = 1; 4 $DBManager = new DBManager(); 5 $Data = $DBManager->tag_select($nursery_school_id); 6 7?> 8<!DOCTYPE html> 9<html> 10<head> 11<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 12<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script> 13<script type="text/javascript" src="https://code.jquery.com/jquery-3.0.0.min.js"></script> 14<script type="text/javascript" src="http://code.jquery.com/ui/1.11.1/jquery-ui.min.js"></script> 15<link rel="stylesheet" href="./css/Upload.css"> 16<title>動画をアップロードする</title> 17<script type="text/javascript" src="./js/movieUpload.js"></script> 18 19</head> 20<body background="back.jpg"> 21 <div id="wrapper"> 22 <!--動画をアップロードするフォームを作る--> 23 <form action="" id="form1" method="post" enctype="multipart/form-data"> 24 <div class="center"> 25 <p><font size="10">ど~があっぷろ~ど</font></p> 26 <img alt="" src="UploadMovieImg.jpeg"><br> 27 <font class="tag">たぐ:</font> 28 <select class="tagselect" id="tagselect" name="tagselect"> 29 <option value=0 selected>みにゅうりょく</option> 30 <?php 31 echo count($Data); 32 echo $Data[0]->tag_id . ' ' . $Data[0]->tag_name . ' ' . $Data[1]->tag_id; 33 for($i = 0; $i < count($Data); $i++){ 34 echo '<option value="' . $Data[$i]->tag_id . '">' . $Data[$i]->tag_name . '</option>'; 35 } 36 ?> 37 </select> 38 <input id="upload" type="button" value="あっぷろ~ど"><br> 39 </div> 40 <div class="center2"> 41 <div id="dropAria" draggable="false"> 42 <input type="file" id="file" name="files[]" multiple> 43 <div id="fileView"> 44 </div> 45 </div> 46 </div> 47 </form> 48 <video src="./video/201705221738551552.avi" poster></video> 49 </div> 50</body> 51</html> 52

css

1#dropAria{ 2 width:817px; 3 height:234px; 4 border:1px dashed black; 5 margin: 25px auto; 6} 7 8#fileView{ 9 width: 100%; 10 height: 100%; 11 display: flex; 12 flex-wrap: wrap; 13 overflow: auto; 14} 15.view-contaier{ 16 width:120px; 17 height:120px; 18 border: 1px solid #555555; 19 overflow: auto; 20} 21.view-contaier div{ 22 width: 100px; 23 margin: 0 auto; 24} 25.view-contaier span{ 26 font-size:25px; 27} 28.view-contaier div img{ 29 width:100px; 30 height:auto; 31 margin-top:20px; 32} 33.view-contaier div video{ 34 width:100px; 35 height:auto; 36} 37.view-contaier div span{ 38 width:100px; 39 height:auto; 40} 41 42 43@font-face{ 44 font-family: 'azuki'; 45 src: url(./fonts/azuki.ttf); 46}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

poster 属性は動画を読みこんでいないときに画像データを表示するために使います。

https://developer.mozilla.org/ja/docs/Web/HTML/Element/video

映像データが利用不可能な場合に表示される画像データを URI 形式で指定します。この属性が指定されない場合、再生可能な映像データがない場合は何も表示されません。

この属性を使わないようにするか、別途画像を用意する必要があります。

投稿2017/05/23 22:09

x_x

総合スコア13749

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

rms398

2017/05/24 04:22

では動画からサムネイルを取得してそのサムネイルをvideoのposterにする処理をすればいいんでしょうかね
x_x

2017/05/24 05:19

いまのブラウザの処理としては読み込めてさえいれば、何もせずともそのままで表示されると思うのですが、ブラウザが未対応の動画形式などになっているのでしょうか? エラーを確認してみるのもいいかもしれません。 https://developer.mozilla.org/en-US/docs/Web/API/MediaError
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問