【问题标题】:How to embed YouTube videos in PHP?如何在 PHP 中嵌入 YouTube 视频?
【发布时间】:2010-09-29 13:46:30
【问题描述】:

如果我们只有 URL 或嵌入代码,谁能告诉我如何显示或嵌入 YouTube 视频?

【问题讨论】:

  • 那不是上传,是嵌入。
  • 它也没有嵌入 PHP...

标签: php html video youtube youtube-api


【解决方案1】:

您必须要求用户存储 youtube 视频中的 11 个字符代码。

例如http://www.youtube.com/watch?v=Ahg6qcgoay4

十一个字符代码为:Ahg6qcgoay4

然后您获取此代码并将其放入您的数据库中。然后,无论您想在页面中放置 youtube 视频的何处,从数据库中加载角色并输入以下代码:-

例如对于 Ahg6qcgoay4,它将是:

<object width="425" height="350" data="http://www.youtube.com/v/Ahg6qcgoay4" type="application/x-shockwave-flash"><param name="src" value="http://www.youtube.com/v/Ahg6qcgoay4" /></object>

【讨论】:

  • 这很容易......谢谢老兄
  • 要求用户从 url 中提取代码是一个坏主意,使用 regex 编写代码来提取它非常容易! -1
  • 谢谢你这是一个非常有用的解决方案
  • 部分 Youtube 视频不包含 ?v=
【解决方案2】:

不要将嵌入代码存储在您的数据库中 - YouTube 可能会不时更改嵌入代码和 URL 参数。例如,&lt;object&gt; 嵌入代码已停用,取而代之的是 &lt;iframe&gt; 嵌入代码。您应该从 URL/嵌入代码中解析出视频 ID(使用正则表达式、URL 解析函数或 HTML 解析器)并存储它。然后使用 YouTube API 当前提供的任何机制显示它。

一个简单的提取视频id的PHP示例如下:

<?php
    preg_match(
        '/[\\?\\&]v=([^\\?\\&]+)/',
        'http://www.youtube.com/watch?v=OzHvVoUGTOM&feature=channel',
        $matches
    );
    // $matches[1] should contain the youtube id
?>

我建议您查看这些文章以了解如何处理这些 id:

创建您自己的 YouTube 视频播放器:

【讨论】:

  • 您能解释一下[\\?\\&amp;] 的作用吗?我觉得这有点令人困惑
  • 好的,因为这是一个单引号字符串,\\?\? 相同(` only escapes ` 或 '
  • ?&amp; 是查询字符串分隔符(v=www.youtube.com/watch?v=ABCDEFGH&amp;feature=feedrec_grec_indexwww.youtube.com/watch?feature=feedrec_grec_index&amp;v=ABCDEFGH 相同)。逃避?&amp; 实际上是一种矫枉过正。 [?&amp;][^?&amp;] 就够了。
  • 这个问题的完整解决方案是MediaEmbed lib,它提取“host slug”和“id”,将它们存储在数据库中并在显示时完成输出 HTML(作为 iframe - 首选- 或作为对象后备)。
【解决方案3】:

您可以通过这种方式从长短的 youtube 网址获取嵌入:

$ytarray=explode("/", $videolink);
$ytendstring=end($ytarray);
$ytendarray=explode("?v=", $ytendstring);
$ytendstring=end($ytendarray);
$ytendarray=explode("&", $ytendstring);
$ytcode=$ytendarray[0];
echo "<iframe width=\"420\" height=\"315\" src=\"http://www.youtube.com/embed/$ytcode\" frameborder=\"0\" allowfullscreen></iframe>";

希望对某人有所帮助

【讨论】:

    【解决方案4】:

    &lt;object&gt;&lt;embed&gt; 标记已根据HTML Youtube Videos 弃用,最好使用&lt;iframe&gt; 标记。

    <iframe width="420" height="315"
    src="http://www.youtube.com/embed/XGSy3_Czz8k?autoplay=1">
    </iframe>
    

    为了让您的用户不用一辈子都在试图在链接中找到视频 ID 以将其放入您的表单字段中,让他们发布他们在 youtube 上找到的视频的链接,您可以使用以下正则表达式来获取视频ID:

    preg_match("/^(?:http(?:s)?:\/\/)?
        (?:www\.)?(?:m\.)?(?:youtu\.be\/|youtube\.com\/(?:(?:watch)?\?(?:.*&)?v(?:i)?=|
        (?:embed|v|vi|user)\/))([^\?&\"'>]+)/", $url, $matches);
    

    要获取视频 ID,您可以获取它$matches[1],这些将匹配:

    此答案的一部分由@shawn 在this question 中的答案引用。

    【讨论】:

    • 换行符/空格为我搞砸了。记得在复制/粘贴时删除它们。
    【解决方案5】:

    使用正则表达式提取watch?v=之后的“视频ID”

    将视频id存储在一个变量中,我们称这个变量为vid

    从随机视频中获取嵌入代码,从嵌入代码中移除视频 id 并将其替换为您获得的 vid

    我不知道如何处理php中的正则表达式,但应该不会太难

    这是python中的示例代码:

    >>> ytlink = 'http://www.youtube.com/watch?v=7-dXUEbBz70'
    >>> import re
    >>> vid = re.findall( r'v\=([\-\w]+)', ytlink )[0]
    >>> vid
    '7-dXUEbBz70'
    >>> print '''<object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/%s&hl=en&fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/%s&hl=en&fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object>''' % (vid,vid)
    <object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/7-dXUEbBz70&hl=en&fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/7-dXUEbBz70&hl=en&fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object>
    >>>
    

    正则表达式v\=([\-\w]+) 捕获v= 之后的(子)字符串和破折号

    【讨论】:

      【解决方案6】:

      这是我编写的一些代码,用于自动将 URL 转换为链接并自动嵌入来自 youtube 的任何视频 URL。我为我正在开发的聊天室制作了它,效果很好。我相信它可以很好地用于任何其他目的,例如博客。

      您所要做的就是调用函数“autolink()”并将要解析的字符串传递给它。

      例如包含下面的函数,然后回显这段代码。

      `
      echo '<div id="chat_message">'.autolink($string).'</div>';
      
      /****************Function to include****************/
      
      <?php
      
      function autolink($string){
          // force http: on www.
          $string = str_ireplace( "www.", "http://www.", $string );
          // eliminate duplicates after force
          $string = str_ireplace( "http://http://www.", "http://www.", $string );
          $string = str_ireplace( "https://http://www.", "https://www.", $string );
      
          // The Regular Expression filter
          $reg_exUrl = "/(http|https|ftp|ftps)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?/";
          // Check if there is a url in the text
      
      $m = preg_match_all($reg_exUrl, $string, $match); 
      
      if ($m) { 
      $links=$match[0]; 
      for ($j=0;$j<$m;$j++) { 
      
          if(substr($links[$j], 0, 18) == 'http://www.youtube'){
      
          $string=str_replace($links[$j],'<a href="'.$links[$j].'" rel="nofollow" target="_blank">'.$links[$j].'</a>',$string).'<br /><iframe title="YouTube video player" class="youtube-player" type="text/html" width="320" height="185" src="http://www.youtube.com/embed/'.substr($links[$j], -11).'" frameborder="0" allowFullScreen></iframe><br />';
      
      
          }else{
      
          $string=str_replace($links[$j],'<a href="'.$links[$j].'" rel="nofollow" target="_blank">'.$links[$j].'</a>',$string);
      
              } 
      
          } 
      } 
      
      
      
      
                     return ($string);
       }
      
      ?>
      

      `

      【讨论】:

        【解决方案7】:

        如果您想以编程方式上传视频,请查看YouTube Data API 以获取PHP

        【讨论】:

        • 是的,这就是我要找的……感谢您的帮助
        【解决方案8】:

        在搜索同一主题时,我发现了另一种使用 Javascript 和 Youtube API 的方法

        直接来自:http://code.google.com/apis/ajax/playground/#simple_embed

        加载 API

        <script src="http://www.google.com/jsapi" type="text/javascript"></script>
        

        并执行以下 javascript 代码:

          google.load("swfobject", "2.1");
          function _run() {
        
            var videoID = "ylLzyHk54Z0"
            var params = { allowScriptAccess: "always" };
            var atts = { id: "ytPlayer" };
            // All of the magic handled by SWFObject (http://code.google.com/p/swfobject/)
            swfobject.embedSWF("http://www.youtube.com/v/" + videoID + "&enablejsapi=1&playerapiid=player1",
                               "videoDiv", "480", "295", "8", null, null, params, atts);
        
        
          }
          google.setOnLoadCallback(_run);
        

        完整的样本在前面提到的页面http://code.google.com/apis/ajax/playground

        【讨论】:

          【解决方案9】:

          您可以使用 Joomla 轻松做到这一点。让我假设一个示例 YouTube URL - https://www.youtube.com/watch?v=ndmXkyohT1M

          <?php 
          $youtubeUrl =  JUri::getInstance('https://www.youtube.com/watch?v=ndmXkyohT1M');
          $videoId = $youtubeUrl->getVar('v'); ?>
          
          <iframe id="ytplayer" type="text/html" width="640" height="390"  src="http://www.youtube.com/embed/<?php echo $videoId; ?>"  frameborder="0"/>
          

          【讨论】:

            【解决方案10】:

            只是对 Alec Smart 回答的一个小更新:由于现在不推荐使用 AS2,因此需要“?version=3”才能使他的示例正常工作。有关详细信息,请参阅“选择要播放的内容”下的 YouTube Embedded Players and Player Parameters 的 Youtube 参考。

            换句话说:

            <object width="425" height="350" data="http://www.youtube.com/v/Ahg6qcgoay4?version=3" type="application/x-shockwave-flash"><param name="src" value="http://www.youtube.com/v/Ahg6qcgoay4?version=3" /></object>
            

            显然,上面的 Youtube 参考是这样做的(内部嵌​​入大概用作尚不支持对象标签的浏览器的后备):

            <object width="640" height="390">
              <param name="movie"
                     value="https://www.youtube.com/v/u1zgFlCw8Aw?version=3&autoplay=1"></param>
              <param name="allowScriptAccess" value="always"></param>
              <embed src="https://www.youtube.com/v/u1zgFlCw8Aw?version=3&autoplay=1"
                     type="application/x-shockwave-flash"
                     allowscriptaccess="always"
                     width="640" height="390"></embed>
            </object>
            

            或使用 iframe(将 http://example.com 替换为您网站的域):

            <iframe id="ytplayer" type="text/html" width="640" height="390" src="http://www.youtube.com/embed/u1zgFlCw8Aw?autoplay=1&origin=http://example.com" frameborder="0"/>
            

            【讨论】:

              【解决方案11】:

              你可以简单地为Varchar date创建一个php输入表单,给它一个varchar长度让我们说300。然后要求用户复制并粘贴嵌入代码。当你查看记录时,你会看到流式视频。

              【讨论】:

                【解决方案12】:

                爱豆,

                如果我理解清楚,用户提供 Youtube 视频的 URL/代码,然后该视频会显示在页面上。

                为此,只需编写一个简单的页面,包括布局等。从 youtube 复制视频嵌入代码并将其粘贴到您的页面中。将嵌入代码替换为某个字段,例如 VideoID。将此 VideoId 设置为您的用户提供的代码。

                编辑:查看 Alec Smart 的回答。

                【讨论】:

                  【解决方案13】:

                  这个YouTube embed generator 解决了我所有的视频嵌入问题。

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 2015-06-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2015-10-16
                    • 1970-01-01
                    • 2013-12-03
                    相关资源
                    最近更新 更多