입력한 URL에 따라 비디오가 자동으로 포함된 방법
배경.
Form에 생방송 URL을 입력할 때 비디오를 자동으로 포함할 필요가 있으므로 설치 방법을 연구했습니다.
이번에는 트위치, 유튜브, 니코니코에 대응했다.
개요
입력한 URL은 정규 표현식으로 잘라서 붙여넣기
<iframe>
를 잘 넣습니다.<iframe>
이쪽입니다.애니메이션 내용별 삽입 방법
Twitch
<iframe src="https://player.twitch.tv/?channel=jornojovanni&autoplay=false"></iframe>
&autoplay=false
Youtube
<iframe src="https://www.youtube.com/embed/ANwf8AE3_d0" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
niconico
<script type="text/javascript" src="http://ext.nicovideo.jp/thumb_watch/1453178722?w=490&h=307"></script>
공식적으로는 ↑이지만 실제로는 iframe을 나타낸다<iframe src="http://embed.nicovideo.jp/watch/1453178722"></iframe>
.해당 URL
http://twitch.tv/********
https://www.twitch.tv/********
https://go.twitch.tv/********
https://m.twitch.tv/********
https://youtu.be/********
https://www.youtube.com/watch?v=********
https://gaming.youtube.com/watch?v=********
https://nico.ms/sm********
https://www.nicovideo.jp/watch/sm********
"****"는 ID입니다.설치 방법
function embedVideo(url: string) {
const hostname = urlParser(url).hostname
const matchesTwitch = url.match(/twitch\.tv\/([^#?/]+)/)
if (/twitch\.tv$/.test(hostname) && matchesTwitch) {
return 'https://player.twitch.tv/?channel=' + matchesTwitch[1] + '&autoplay=false'
}
if (/(youtube\.com|youtu\.be)$/.test(hostname) && !/\/user\//.test(url) && !/\/channel\//.test(url)) {
const matches = url.match(/(\/watch\?v=|youtu\.be\/)([^#&?/]+)/)
if (!matches) return ''
return 'https://www.youtube.com/embed/' + matches[2]
}
if (/(nicovideo\.jp|nico\.ms)$/.test(hostname) && !/live/.test(hostname)) {
const matches = url.match(/(\/watch\/|nico\.ms\/)([^#&?/]+)/)
if (!matches) return ''
return 'https://embed.nicovideo.jp/watch/' + matches[2]
}
return ''
}
Vue.js의 상황
Vue.Filters에 추가
filters: {
embedVideo,
},
iframe의 src로 여과하면 됩니다.<iframe :src="url | embedVideo" allow="fullscreen"></iframe>
회전식 지원
.video
position relative
padding-bottom 56.25%
& > iframe
position absolute
size 100% 100%
border none
<iframe>
원형을 유지하면 사이즈가 변하지 않기 때문에position: absolute;
로 띄우고 부요소에 같은 높이의padding을 취하면 가변적으로 변할 수 있다.2021-06-02 보충
aspect-ratio: 16/9;
도 사용 가능합니다.하지만 사파리는 대응하지 않았다.Reference
이 문제에 관하여(입력한 URL에 따라 비디오가 자동으로 포함된 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/012/articles/537115a9d8020d79479e텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)