【问题标题】:Return to original page after PHP script send videoPHP脚本发送视频后返回原始页面
【发布时间】:2021-01-27 11:15:08
【问题描述】:

有没有办法在视频播放完后跳回原来的页面? 我从 HTML 中的视频链接调用 PHP

...
<a href="play.php">My Video
...

和 play.php 发回视频 像这样:

<?php
$CTYP= 'video/mp4';
$VidPath = "../MyVideo.mp4";  
header('Content-Type: ' . $CTYP);
$VidFl = fopen($VidPath, "rb");
$VidContent = fread($VidFl, filesize($VidPath));
fclose($VidFl);
echo $VidContent; 
?>

谢谢

【问题讨论】:

  • 不是您以前的方式,因为您实际上只是直接显示视频文件。浏览器在那个时候接管。也许在某些浏览器中它甚至不会显示,只是下载。您必须改为显示一个嵌入了视频的 HTML 页面,并使用一些 JavaScript 来检测视频的结尾,然后让浏览器向后导航
  • 如前所述,创建一个 HTML 页面并使用 video 标记。在那里您可以订阅播放视频后触发的ended 事件。
  • 感谢 Markus 和 ADyson,看起来更好的选择是使用视频标签。尽管在这种情况下,视频已经在页面上占据了空间,并且在视频很多的情况下,网页会被填满。我宁愿只有链接,点击它会在灯箱中打开
  • 您仍然可以拥有一个指向页面的链接,然后该页面上只有一个视频!或者是的,您可以改用灯箱 - 然后在视频播放完毕后关闭灯箱。
  • 嗨,ADyson,你能告诉我在灯箱中打开然后关闭它的示例吗?

标签: php html html5-video


【解决方案1】:

针对有类似问题的任何人的最终更新,它现在是根据建议修改原始方法的工作版本(应该更仔细地阅读以避免绕过解决方案:)。

所以 index.html 带有

....
<tr><td>
  <video height="auto" width="200" controls >
    <source src="play.php?play_video=101" type="video/mp4"> 
 </video>        
</td> <td>Lecture 101....</td>
</tr><tr><td>
  <video height="auto" width="200" controls >
    <source src="play.php?play_video=102" type="video/mp4">
  </video>        
</td> <td>Lecture 102....</td> 
</tr>
....

play.php 像原来的 href 链接标签一样返回流

<?php
include 'dblog.php';
if ( ($_SERVER['REQUEST_METHOD'] === "GET")
     && ( isset($_GET['play_video']) ) ) {
  if ($_GET['play_video'] == "101")  {
    $file_path_name = "../../DVD/Lecture-101.mp4";
  } elseif ($_GET['play_video'] == "102") {
    $file_path_name = "../../DVD/Lecture-102.mp4";
  }
  $ctype= 'video/mp4';
  header('Content-Type: ' . $ctype);
  $handle = fopen($file_path_name, "rb");
  $contents = fread($handle, filesize($file_path_name));
  fclose($handle);
  write_vid_log($_GET['play_video'], $DB, 'start');
  echo $contents; 
} else {
  echo "alert(I'm Sorry wrong link)";
}
?>

所以现在可以在 www 根文件夹之外提供链接,并在客户端点击时播放视频。更多挑战:

  • 媒体文件的链接很容易下载,即使没有显示路径和文件名,所以我需要在流式传输视频文件之前使用 PHP 脚本检查用户及其权限
  • 使用 CSS 调整页面大小和居中视频,一旦点击播放,就可以被视为在灯箱中播放。看起来即使没有任何 JS 也是可能的

任何额外的建议,将不胜感激

【讨论】:

  • 这很棒。真高兴你做到了。我喜欢你如何将挑战分解为不同的步骤,并在解决下一个问题之前让小部分工作。这是一种对程序员有效的好方法。我看到太多人将他们的整个应用程序视为一个无法单独测试不同部分的巨大块。所以你正在以一种好的方式做事......祝项目的其余部分好运。如果您需要,请回到这里当然有关于后续步骤的新问题。
【解决方案2】:

更新,基于我收到的反馈的部分解决方案,我更新了 php 脚本以发送回

...
<a href="play.php">My Video
...

而我的play.php文件是这样的

<?php
$VidPath = "../MyVideo.mp4";  
?>
<!DOCTYPE HTML>
<html lang="en">
<head>
  <link rel="stylesheet" href="video.css" media="screen,print" />'
<title>Test Video play list</title>
<meta charset="utf-8" />
</head>
<body>
<video id="MyVideo" height="auto" width="auto" controls autoplay > <source src=<?php echo $VidPath; ?> type="video/mp4"> </video>
<script>
  var vid = document.getElementById("MyVideo"); 
  vid.onended = function() { 
    history.back(); 
  }; 
</script>
</body>
</html>

这是一个不错的选择:

  • 在空白页面中播放视频并使用 CSS 设置样式,这样就可以看起来几乎像灯箱,无需任何 JS 或外部代码
  • 视频结束后,我可以自动跳回原来的列表

但还是不行:

  • 指定网站根文件夹之外的路径
  • firefox 似乎不想自动播放,所以需要额外的点击
  • 在与我的 index.html 相同的页面中播放视频,看起来像灯箱效果

希望得到更多提示 D

【讨论】:

  • 如果您想在站点根目录之外指定一个文件,请将视频标签的src= 指向一个 PHP 脚本,该脚本与您问题中的原始“play.php”具有相似的功能,除了它需要一个 ID 或文件名作为输入(例如src="getvideo.php?file=123.mp4")并使用它来决定返回哪个确切的文件内容。如果您让它接受文件名而不是 ID,请确保它已经过清理和安全,并且不能用于从您要允许的位置之外拉取文件。我个人会将视频路径的记录存储在数据库中,然后让脚本在那里查找
  • 自动播放由用户自行决定。你不能强迫它(谢天谢地,考虑到我们会得到的所有那些可怕的视频广告)。不同的浏览器实现它的方式略有不同,但它们都发布了关于它如何工作的信息。
  • play video in same page as my index.html that would look like lightbox efect...这是一个全新问题的主题。
  • 我曾尝试在索引 html 中添加 \
  • 我打算把所有文件路径都放在mysql表中,但我需要先让它直接工作。我无论如何都实现了数据库以检查用户名,看看他们是否应该能够观看视频
猜你喜欢
  • 1970-01-01
  • 2010-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-23
  • 2011-12-05
相关资源
最近更新 更多