/** * プラグイン規定関数::ブロック型で呼び出された場合の処理 * 動画再生画面を生成する * * 引数: コースID、セッションID、チャプターID * カンマの後に空白は入れないこと * 例) #movieviewer_embed("GDGuide","01","01"); * * @return string 画面(html) */ function plugin_movieviewer_embed_convert() { $videoopts = func_get_args(); $settings = MovieViewerSettings::loadFromYaml(PLUGIN_MOVIEVIEWER_PATH_TO_SETTINGS); $cf_settings = $settings->aws['cloud_front']; $builder = new MovieViewerAwsCloudFrontUrlBuilder($cf_settings); $signed_path_rtmp = $builder->buildVideoRTMPUrl($videoopts[0], $videoopts[1], $videoopts[2], 24 * 60 * 60); $signed_path_hls = $builder->buildVideoHLSUrl($videoopts[0], $videoopts[1], $videoopts[2], 24 * 60 * 60); $base_uri = plugin_movieviewer_get_base_uri(); // videojs-contrib-hls.min.js は Firefox on Mac用 (現時点では) $embed = <<<EOC <link href="//vjs.zencdn.net/5.4/video-js.css" rel="stylesheet"> <video id="my_video_1" class="video-js vjs-default-skin vjs-big-play-centered" preload="auto" controls width="550" height="319" data-setup='{"techOrder":["flash","html5"]}'> <source src="rtmp://{$cf_settings['host']['video']['rtmp']}/cfx/st/&mp4:{$signed_path_rtmp}" type="rtmp/mp4"> <source src="{$signed_path_hls}" type="application/x-mpegURL"> </video> <p> 最大化ボタン <img src="{$base_uri}/plugin/movieviewer/assets/images/button-maximize.png"> は再生ボタン <img src="{$base_uri}/plugin/movieviewer/assets/images/button-play.png"> を押した後、表示されます。 </p> <script src="https://vjs.zencdn.net/5.4/video.js"></script> <script src="{$base_uri}/plugin/movieviewer/assets/js/videojs-contrib-hls.min.js"></script> EOC; return $embed; }
/** * [アクション] 動画再生画面を生成し、クライアントに送信する * * 注意: exitを呼ぶので、処理の最後に呼び出すこと * * @return void */ function plugin_movieviewer_action_show_movie() { date_default_timezone_set("Asia/Tokyo"); $settings = MovieViewerSettings::loadFromYaml(PLUGIN_MOVIEVIEWER_PATH_TO_SETTINGS); $cf_settings = $settings->aws['cloud_front']; $target = array("course" => filter_input(INPUT_POST, "course"), "session" => filter_input(INPUT_POST, "session"), "chapter" => filter_input(INPUT_POST, "chapter")); try { plugin_movieviewer_validate_course_id($target["course"]); } catch (MovieViewerValidationException $ex) { plugin_movieviewer_abort("指定した内容に誤りがあります。"); } try { plugin_movieviewer_validate_session_id($target["session"]); } catch (MovieViewerValidationException $ex) { plugin_movieviewer_abort("指定した内容に誤りがあります。"); } try { plugin_movieviewer_validate_chapter_id($target["chapter"]); } catch (MovieViewerValidationException $ex) { plugin_movieviewer_abort("指定した内容に誤りがあります。"); } $user_id = plugin_movieviewer_get_auth_manager()->getUserId(); $current_user = plugin_movieviewer_get_user_repository()->findById($user_id); $viewing_periods = plugin_movieviewer_get_viewing_periods_by_user_repository()->findById($user_id); $canView = $viewing_periods->canView($target['course'], $target['session']); if (!$canView) { plugin_movieviewer_abort("この動画は見ることができません。"); } $builder = new MovieViewerAwsCloudFrontUrlBuilder($cf_settings); $signed_path_rtmp = $builder->buildVideoRTMPUrl($target['course'], $target['session'], $target['chapter'], 24 * 60 * 60); $signed_path_hls = $builder->buildVideoHLSUrl($target['course'], $target['session'], $target['chapter'], 24 * 60 * 60); $base_uri = plugin_movieviewer_get_base_uri(); pkwk_common_headers(); header('Content-type: text/html'); print <<<EOC <video id="my_video_1" class="video-js vjs-default-skin vjs-big-play-centered" preload="auto" controls width="800" height="500" data-setup='{"techOrder":["flash","html5"]}'> <source src="rtmp://{$cf_settings['host']['video']['rtmp']}/cfx/st/&mp4:{$signed_path_rtmp}" type="rtmp/mp4"> <source src="{$signed_path_hls}" type="application/x-mpegURL"> </video> <p> 最大化ボタン <img src="{$base_uri}/plugin/movieviewer/assets/images/button-maximize.png"> は再生ボタン <img src="{$base_uri}/plugin/movieviewer/assets/images/button-play.png"> を押した後、表示されます。 </p> EOC; exit; }