2011-01-28 29 views

Trả lời

7

Giả sử bạn có URL của video, thật đơn giản để tạo một video. Bạn cần kết thúc URL (phần sau /watch? V =, hãy gọi nó là ID). Để tạo ra html nhúng iframe, chỉ cần đặt nó vào vị trí thích hợp (trong thuộc tính src, không bao gồm dấu ngoặc):

<iframe title="YouTube video player" class="youtube-player" type="text/html" width="640" 
height="390" src="http://www.youtube.com/embed/{ID}" frameborder="0" 
allowFullScreen></iframe> 

Có một vài cách khác nhau để có được những tham số v từ URL. Một biểu thức chính quy sẽ hoạt động.

+1

Phương pháp trên dường như mát mẻ, nhưng chúng ta có thể dựa vào kỹ thuật này để giả định rằng định dạng này wi sẽ không bị YouTube thay đổi. Lưu ý: Tôi đang lập kế hoạch lưu trữ ID này trong cơ sở dữ liệu và xây dựng mã HTML này thay vì lưu trữ toàn bộ HTML. Nó có được khuyến khích không? – Jason

+3

Chắc chắn, tôi đã thực hiện nó trên các trang web sản xuất trước đây. Tôi thực sự đã sử dụng kiểu HTML ebmed cũ, nhưng nó vẫn hoạt động ngay cả khi nhúng iframe mới này được ưu tiên. Google rất quan tâm đến việc duy trì khả năng tương thích với tất cả các video hiện đang được nhúng, vì vậy bạn không có gì phải lo lắng. – probabilityzero

+1

YouTube đã sử dụng phương pháp này trong một thời gian dài và dường như hỗ trợ sử dụng phương pháp này theo cách này .. như đã nêu. –

0

Mặc dù câu trả lời được chấp nhận hoạt động, nếu bạn muốn thực hiện điều này theo chương trình, bạn cần tỷ lệ khung hình chính xác để tạo thứ nguyên iframe tối ưu cho video của bạn. Tôi đã viết các chức năng php sau đây có thể tạo ra một liên kết cho bạn trên bay. Nó sử dụng các tiện ích bash youtube-dl để có được thông tin về video từ bất kỳ liên kết youtube, vì vậy bạn sẽ cần phải chắc chắn rằng đã được cài đặt (apt-get install youtube-dl nên làm việc trên Ubuntu hoặc hương vị debian khác)

function getYoutubeEmbed($link, $size = [], $options = [], $privacy = false) { 

    $options += [ 
     'rel'  => true, // Show suggested videos when the video finishes. 
     'controls' => true, // Show player controls. 
     'showinfo' => true, // Show video title and player actions. 
    ]; 

    $json = json_decode(exec('youtube-dl -j --no-warnings ' . $link . ' 2>/dev/null')); 
    if ($json && !empty($id = $json->id) && !empty($width = $json->width) && !empty($height = $json->height)) { 

     $args = []; 
     foreach ($options as $option => $value) { 
      if (!$value) { 
       $args[] = $option . '=0'; 
      } 
     } 

     if ($size) { 
      if (!empty($size['width']) && !empty($size['height'])) { 
       $width = $size['width']; 
       $height = $size['height']; 
      } else if (!empty($size['width'])) { 
       $height = ceil(($height * $size['width'])/$width); 
       $width = $size['width']; 
      } else if (!empty($size['height'])) { 
       $width = ceil(($width * $size['height'])/$height); 
       $height = $size['height']; 
      } 
     } 

     $url = ($privacy ? 'www.youtube-nocookie.com/embed/' : 'www.youtube.com/embed/') . $id . ($args ? '?' . implode('&amp;',$args) : ''); 
     $iframe = '<iframe width="' . $width . '" height="' . $height . '" src="//' . $url . '" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen></iframe>'; 
     return $iframe; 
    } else { 
     return false; 
    } 
} 

Chức năng là khá tự giải thích nhưng đây là sự cố:

  • Ở mức tối thiểu, bạn cần phải cung cấp liên kết cho đối số đầu tiên.
  • Đối số thứ hai là một mảng có chiều rộng, chiều cao hoặc cả hai. Nếu bạn chỉ xác định nó sẽ xử lý giữ tỷ lệ khung hình mặc định và tính kích thước khác cho bạn (đây là cách tôi thường sử dụng nó).
  • Đối số thứ ba là một mảng đối số tùy chọn được ghi lại trong chính hàm đó.
  • Các fourt là một cuộc tranh cãi boolean tùy chọn cho 'riêng tư' được giải thích như sau:

Kích hoạt chế độ tăng cường bảo mật. Khi bạn bật chế độ tăng cường bảo mật, YouTube sẽ không lưu trữ thông tin về khách truy cập trên trang web của bạn trừ khi họ phát video. Ví dụ

Cách sử dụng:

$link = 'https://www.youtube.com/watch?v=adAqQct3vRI'; 
echo getYoutubeEmbed($link, ['width' => 560], ['rel' => false]); 

Output:

<iframe width="560" height="315" src="//www.youtube.com/embed/605gdJGdaPE?rel=0" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen></iframe>

Các vấn đề liên quan