์๊ฐ๋ ๊ฐ๋จํฉ๋๋ค. ๋ก์ปฌ ์ฌ์๋ชฉ๋ก, ์ฑ๋ ๋ฐ ์ถ์ฒ ๊ธฐ๋ฅ์ ๊ฐ์ถ Android์ฉ YouTube ์จ๋ผ์ธ ํ๋ ์ด์ด์ ๋ํด ์ด์ผ๊ธฐํ๊ณ ์ถ์ต๋๋ค.
ํ์ฅ๋ ์๊ฐ:
์ผ๋ง ์ ๋๋ ํ๋ฅญํ ์์ฉ ํ๋ก๊ทธ๋จ์ ์์ฑ์์ ๋๊ฐ์ ๋ฌธ์ ์ ์ง๋ฉดํ์ต๋๋ค.
๋ถํํ๊ฒ๋ ์ฑ๋ ํ์ดํธ๋ฆฌ์คํธ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ค์นํ ํ ๋ ๋ค๋ฅธ ํ๋ฒํ์ง๋ง ์ฌ์ ํ ์น๋ช ์ ์ธ ๊ฒฐํจ์ด ๋ฐ๊ฒฌ๋์์ต๋๋ค. NIH I(๊ทธ๋ฆฌ๊ณ ๊ฐ์ฅ ์ค์ํ ๊ฒ์ ๋ด ์๋ค)์ ํนํ YouTube Kids ํ๋ ์ด์ด๋ฅผ ์ฌ์ฉํ๋ ์ต๊ด ์ดํ์ ์ธํฐํ์ด์ค๊ฐ ๊ทธ๋ค์ง ํธ๋ฆฌํ์ง ์๋ค๋ ๊ฒ์ ์์์ต๋๋ค.
์ผ๋ฐ์ ์ผ๋ก ์ผ๋ง ํ ์ ๋ ์ง์ ๊ตฌํํ ์ค๋น๊ฐ ๋์์ต๋๋ค. ์๊ฐ์ด ์ข ์ง๋์ ์ฒซ ๋ฒ์งธ ๋ฆด๋ฆฌ์ค์ ํ๊ทธ๋ฅผ ๋ถ์ด๋ ๊ฒ์ด ๊ฐ๋ฅํด์ก์ต๋๋ค.
์ฃผ์ ๊ธฐ๋ฅ :
- ์ฆ๊ฒจ์ฐพ๋ ์ฑ๋๊ณผ ์ฌ์ ๋ชฉ๋ก์ ์ถ๊ฐํ์ธ์. ๋ก์ปฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅ๋๊ณ ์์ธ์ด ์์ฑ๋ฉ๋๋ค.
- ์ถ๊ฐ๋ ์ฌ์๋ชฉ๋ก ๋ด์์ ํ์ํ์ง ์์ ๋ถํ์ํ ๋์์์ ๋์ธ์.
- ์ถ์ฒ ๋ชฉ๋ก์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ถ๊ฐ๋ ์ฑ๋๊ณผ ์ฌ์๋ชฉ๋ก์์๋ง ๋ฌด์์๋ก ์์ฑ๋ฉ๋๋ค.
์คํ ์์ค, GPLv3 ๋ผ์ด์ผ์ค:
๋ค์์ ์ฃผ์ ๊ธฐ๋ฅ์ ๋ํ ๊ฐ์์ Google API ๋ฐ ์น ๋ํผ๋ฅผ ์ฌ์ฉํ์ง ์๊ณ Android ์ ํ๋ฆฌ์ผ์ด์ ์์ YouTube ๋์์์ ์ฌ์ํ๋ ๋ฐฉ๋ฒ์ ๋ํ ๋ช ๊ฐ์ง ๊ธฐ์ ์ ์ธ ์ธ๋ถ์ ๋ณด์ ๋๋ค.
๋ฉ์ธ ํ๋ฉด ๋ฐ ํ๋ ์ด์ด ํ๋ฉด: ๋ฌด์์๊ฐ ์๋ ์ฑ๋์ ๋ฌด์์ ์ถ์ฒ
๋ก์ปฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ฆ์ ๊ฒ์
์ ์ฑ๋ ๋๋ ์ฌ์๋ชฉ๋ก ์ถ๊ฐ
์จ๋ผ์ธ์์ ์ด๋ฆ์ผ๋ก ๊ฒ์ํ๊ฑฐ๋ ์๋ ค์ง ์ฃผ์๋ฅผ ์ ๋ ฅํ์ธ์. ์ฑ๋ ๋๋ ์ฌ์ ๋ชฉ๋ก์ ๋น๋์ค ๋ชฉ๋ก์ ๋ก์ปฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅ๋๋ฉฐ ์์ด์ฝ์ ์บ์๋์ง ์์ต๋๋ค.
๋์ ์ฌ์๋ชฉ๋ก - ๊ฒ์๊ฒฐ๊ณผ ์ฌ์
๋์์ ์ถ์ฒ์๋ ๊ฒ์์ด๋ฅผ ๋ง์กฑํ๋ ๋์์๋ง ํ์๋ฉ๋๋ค.
๋ง์ฐฌ๊ฐ์ง๋ก ์ฌ์๋ชฉ๋ก ์ค์ ์์ ๋์์์ ์ด๋ฉด ๋์ผํ ์ฌ์๋ชฉ๋ก์ ์๋ ๋์์๋ง ์ถ์ฒ ๋ชฉ๋ก์ ํ์๋ฉ๋๋ค.
์ฌ์๋ชฉ๋ก๊ณผ ์ฑ๋์ ์ผ์์ ์ผ๋ก ๊ป๋ค๊ฐ ๋ค์ ์ผค ์ ์์ต๋๋ค.
์ฐธ๊ณ : ๋นํ์ฑํ๋ ์ฌ์๋ชฉ๋ก์ ๋์์์ ๊ฒ์ ๊ฒฐ๊ณผ, ์์ฒญ ๊ธฐ๋ก, ์ฆ๊ฒจ์ฐพ๊ธฐ ๋ชฉ๋ก์์๋ ์ฌ๋ผ์ง๋๋ค. ํ์ง๋ง ๊ฑฑ์ ํ์ง ๋ง์ธ์. ์ฌ์๋ชฉ๋ก์ ๋ค์ ์ผ๋ฉด ์ฆ์ ํด๋น ํญ๋ชฉ์ด ๋ค์ ํ์๋ฉ๋๋ค.
๋ธ๋๋ฆฌ์คํธ์ ๋น๋์ค ์ถ๊ฐ
์ฐจ๋จ๋ ๋์์์ ์ถ์ฒ, ๊ฒ์ ๊ฒฐ๊ณผ์ ํ์๋์ง ์์ผ๋ฉฐ ์ฆ๊ฒจ์ฐพ๊ธฐ ๋ชฉ๋ก ๋ฐ ์์ฒญ ๊ธฐ๋ก์์๋ ์ฌ๋ผ์ง๋๋ค. ๋์์์ ์ฌ์๋ชฉ๋ก ์ค์ ์ ๊ณ์ ํ์๋ฉ๋๋ค.
๋ธ๋๋ฆฌ์คํธ๋ฅผ ๋ณด๊ณ ์ค์๋ก ์ฐจ๋จ๋ ํญ๋ชฉ์ ๋ค์ ํ์ฑํํ์ญ์์ค.
์ค์ > ํค๋ ๋ฉ๋ด > ๋ธ๋๋ฆฌ์คํธ
์ฆ๊ฒจ์ฐพ๋ ๋์์ ๋ฐ ์์ฒญ ๊ธฐ๋ก
ํ๋ ์ด์ด ํ๋ฉด์์ ์ฆ๊ฒจ์ฐพ๋ ๋์์์ ์ค๋ฅธ์ชฝ ์๋จ์ ๋ณํ๋ก ํ์๋ฉ๋๋ค.
ํ๋ฉด ์ ๋ชฉ์ ์ปจํ ์คํธ ๋ฉ๋ด์ ๊ฐค๋ฌ๋ฆฌ ๋ฐ ๋ชฉ๋ก์ ๋กฑํด๋ฆญ
๋ณด๊ธฐ ํ๋ฉด์ด๋ ๋ชฉ๋ก์์ ๋น๋์ค ๋๋ ์ฌ์ ๋ชฉ๋ก์ ์ด๋ฆ์ด๋ ์ฃผ์๋ฅผ ๋ณต์ฌํฉ๋๋ค.
๋น ๋ฅธ ์์ - ์ถ์ฒ ์ฑ๋ ๋ฐ ์ฌ์๋ชฉ๋ก ์ถ๊ฐ
์์ฉ ํ๋ก๊ทธ๋จ์ ์ฆ์ ์์ ์คํฌ๋ฆฐ์ท์ฒ๋ผ ๋ณด์ ๋๋ค.
๋ถํ์ํ ์ฑ๋๊ณผ ์ฌ์๋ชฉ๋ก์ ์ค์ ์์ ๋๊ฑฐ๋ ์ญ์ ํ ์ ์์ต๋๋ค.
์ค์น
์ง๋ฌธ๊ณผ ๋๋ต :
์์ด๋ก:
๋ฆด๋ฆฌ์ค:
- Google Play์ ์์ผ๋ฉฐ ๊ฐ๊น์ด ์์ผ ๋ด์ ์ถ์๋์ง ์์ ๊ฒ์ ๋๋ค(Google์ ์ธ๊ธ๋ ์ฑ๋ ํ์ดํธ๋ฆฌ์คํธ ๋๋ NewPipe ํ๋ ์ด์ด๋ฅผ ํฌํจํ์ฌ API๋ฅผ ์ฐํํ๊ณ ์น์ฌ์ดํธ๋ฅผ ๊ตฌ๋ฌธ ๋ถ์ํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ธ์งํฉ๋๋ค).
- ์์ค์์ ๋น๋:
https://github.com/sadr0b0t/yashlang/ - ๋ฆด๋ฆฌ์ค ์น์
์์ APK๋ฅผ ๋ค์ด๋ก๋ํ์ธ์.
https://github.com/sadr0b0t/yashlang/releases - ์๊ฐ์ด ์ข ์ง๋๋ฉด ์นดํ๋ก๊ทธ์ ๋์ฌ ๊ฒ ๊ฐ์์
F-๋๋ก์ด๋ (์ถ๊ฐ ์ ์ฒญ์ด ์น์ธ๋ ๊ฒ ๊ฐ์ต๋๋ค , ๊ทธ๋ฌ๋ ๊ฑฐ์ ํ ๋ฌ ๋์ ๋ ์ด์ ์์ง์ด์ง ์์์ง๋ง ์์ง์ ์๋๋๋ค
๋์ผํ ๊ธฐ๊ธฐ์์ ์๋ก ๋ค๋ฅธ ์์ค์ ์๋ก ๋ค๋ฅธ ๋ฒ์ ๊ฐ ์ ํ์ apk ํ์ผ์ ์๋ช ์ด ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ์๋ํ์ง ์๋๋ค๋ ์ ์ ๋ช ์ฌํ์ธ์. ์ ์์ค์์ ๋ฒ์ ์ ์ค์นํ๊ธฐ ์ ์ ๋จผ์ ๋ฐ์ดํฐ์ ํจ๊ป ์ค์น๋ ๋ฒ์ ์ ์ญ์ ํด์ผ ํฉ๋๋ค. ์ฌ์๋ชฉ๋ก ์บ์ ๋ฐ ๊ฒ์ ๊ธฐ๋ก(๋๋ ๋ฐ์ดํฐ ์ ์ก ๋ฐฉ๋ฒ ์์๋ณด๊ธฐ)
๊ธฐ์ ์ธ๋ถ ์ ๋ณด
Google/YouTube ๊ณ์ ์ด ํ์ํ์ง ์์ผ๋ฉฐ ์ธํฐ๋ท๋ง ํ์ํ๋ฉฐ ๋ค์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์๋ก์ด ํ์ดํ ์ถ์ถ๊ธฐ YouTube ์๋น์ค๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ์์ ํ๊ณExoPlayer ๋น๋์ค๋ฅผ ์ฌ์ํฉ๋๋ค.
์คํ ์์ค, ๋ฌด๋ฃ GPLv3 ๋ผ์ด์ผ์ค.
์ง๋ฌธ: ์์ฑ์์ ํ๊ฐ ์์ด(๋๋ ๋ช
์์ ์ธ ๊ธ์ง) ์น์ฌ์ดํธ๋ฅผ ์คํฌ๋ฉํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ผ๋ก ํฉ๋ฒ์ ์ธ๊ฐ์?
๋ต๋ณ: ๋ฌผ๋ก ํฉ๋ฒ์ ์
๋๋ค. ๊ณต๊ฐ์ ์ผ๋ก ์ด์ฉ ๊ฐ๋ฅํ ์ ๋ณด๋ฅผ ์ฝ๋ ๋ฐ ์ด๋ค ๋๊ตฌ๋ฅผ ์ฌ์ฉํ ์ง๋ ๊ทํ์๊ฒ ๋ฌ๋ ค ์์ต๋๋ค. ๋ฟ๋ง ์๋๋ผ:
์ผ๋ถ ์ฝ๋
๋์๊ด
์ฌ์ ๋ชฉ๋ก์ ๋ก๋ํ๋ ์ฝ๋๋ ์ฝ๊ฐ ๋ฒ๊ฑฐ๋ก์์ ์ฌ๊ธฐ์๋ ์ค๋ช
ํ์ง ์๊ฒ ์ต๋๋ค. ๊ด์ฌ ์๋ ๋ถ๋ค์ ์์ค ์ฝ๋๋ฅผ ์ดํด๋ณด์ธ์. ๊ธฐ๋ณธ์ ์ผ๋ก ํด๋์ค์
๋๋ค.
๊ณต๊ฐ ๋น๋์ค ํ์ด์ง์ ์ฃผ์์์ ๋น๋์ค ์คํธ๋ฆผ์ ์ฃผ์๋ฅผ ๊ฐ์ ธ์ ํ๋ ์ด์ด์์ ์ฌ์ํ๋ ๋ฐฉ๋ฒ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ค์์ ์ฐ๊ฒฐํ์ญ์์ค.
dependencies {
...
// NewPipe: youtube parser
// https://github.com/TeamNewPipe/NewPipeExtractor
implementation "com.github.TeamNewPipe:NewPipeExtractor:v0.17.4"
...
}
์ด ํ์๋ ์ฌ์ ํ ์ฌ์ฉํ ์ ์๋ค๋ ๊ฒ์ด ๊ถ๊ธํฉ๋๋ค. ์๋ํ๋ฉด... ์์ ์์๋ Downloader ํด๋์ค๊ฐ ๋๋ฝ๋์๋ค๊ณ ๋ถํํฉ๋๋ค. ์๋ํ๋ ํ
์คํธ ๋๋ ํฐ๋ฆฌ์์ ํ๋ก์ ํธ๋ก ๋ณต์ฌํ ์ ์์ต๋๋ค.
YouTube ์น์ฌ์ดํธ์ ๋น๋์ค ํ์ด์ง ์ฃผ์๋ก ๋น๋์ค ์คํธ๋ฆผ์ ์ฃผ์๋ฅผ ์ป์ผ์ธ์:
public String extractYtStreamUrl(final String ytVidUrl) throws ExtractionException, IOException {
// https://github.com/TeamNewPipe/NewPipeExtractor/blob/dev/extractor/src/test/java/org/schabi/newpipe/extractor/services/youtube/YoutubeStreamExtractorDefaultTest.java
NewPipe.init(Downloader.getInstance(), new Localization("GB", "en"));
final YoutubeStreamExtractor extractor = (YoutubeStreamExtractor) YouTube
.getStreamExtractor(ytVidUrl);
extractor.fetchPage();
final String streamUrl = extractor.getVideoStreams().size() > 0 ? extractor.getVideoStreams().get(0).getUrl() : null;
// for (final VideoStream stream : extractor.getVideoStreams()) {
// stream.getUrl();
// }
return streamUrl;
}
๋์์ ์ฃผ์ ytVidUrl์ YouTube ์น์ฌ์ดํธ์ ์๋ ๋ชจ๋ ๋์์ ํ์ด์ง์ ๊ณต๊ฐ ์ฃผ์์ผ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด
ํ๋ ์ด์ด๋
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํ๋ก์ ํธ์ ์ฐ๊ฒฐ
dependencies {
...
// google Exoplayer
// https://github.com/google/ExoPlayer
// https://exoplayer.dev/
implementation 'com.google.android.exoplayer:exoplayer:2.10.8'
...
}
์ ํ๋ฆฌ์ผ์ด์ ํ๋ฉด์ ํ๋ ์ด์ด ๊ตฌ์ฑ์์๋ฅผ ๋ฐฐ์นํ๋ ๋ฐ ๋ฐ๋ฅธ ๋ชจ๋ ๋ฏธ๋ฌํ ์ฐจ์ด๋ฅผ ๊ณ ๋ คํ์ง๋ ์์ ๊ฒ์ ๋๋ค(ํ๋ก์ ํธ ์น์ฌ์ดํธ๋ ์ฝ๋์์ ์์ ๋ฅผ ๋ณผ ์ ์์). ํ๋ ์ด์ด์์ YouTube์ ๋น๋์ค ์ฌ์์ ์์ํ๋ ๋ฐฉ๋ฒ๋ง ์ดํด๋ณด๊ฒ ์ต๋๋ค. ์์์ ๋ฐ์ ์ฃผ์:
private void playVideoStream(final String streamUrl, final long seekTo) {
if (streamUrl == null) {
// ะพััะฐะฝะพะฒะธัั ะฟัะพะธะณััะฒะฐะฝะธะต ัะตะบััะตะณะพ ัะพะปะธะบะฐ, ะตัะปะธ ะฑัะป ะทะฐะณััะถะตะฝ
videoPlayerView.getPlayer().stop(true);
} else {
// https://exoplayer.dev/
// https://github.com/google/ExoPlayer
final Uri mp4VideoUri = Uri.parse(streamUrl);
final MediaSource videoSource = new ProgressiveMediaSource.Factory(videoDataSourceFactory)
.createMediaSource(mp4VideoUri);
// ะะพััะฐะฒะธะผ ะฝะฐ ะฟะฐัะทั ััะฐัะพะต ะฒะธะดะตะพ, ะฟะพะบะฐ ะณะพัะพะฒะธะผ ะฝะพะฒะพะต
if (videoPlayerView.getPlayer().getPlaybackState() != Player.STATE_ENDED) {
// ะัะปะธ ััะฐะฒะธัั ะฝะฐ ะฟะฐัะทั ะทะดะตัั ะฟะพัะปะต ัะพะณะพ, ะบะฐะบ ะฟะปะตะตั ะฒััะฐะป ะฝะฐ ะฟะฐัะทั ัะฐะผ, ะทะฐะบะพะฝัะธะฒ
// ะธะณัะฐัั ะฒะธะดะตะพ, ะฟะพะปััะธะผ ะทะดะตัั ะฒัะพัะพะต ัะพะฑััะธะต STATE_ENDED, ะฟะพััะพะผั ะฝะฐะผ ะฝัะถะฝะฐ ะทะดะตัั
// ัะฟะตัะธะฐะปัะฝะฐั ะฟัะพะฒะตัะบะฐ.
// ะัะธ ััะพะผ ะทะฝะฐัะตะฝะธะต getPlayWhenReady() ะพััะฐะฝะตััั true, ะฟะพััะพะผั ะฟัะพะฒะตััะตะผ ะธะผะตะฝะฝะพ ัะพััะพัะฝะธะต.
// https://github.com/google/ExoPlayer/issues/2272
videoPlayerView.getPlayer().setPlayWhenReady(false);
}
// Prepare the player with the source.
((SimpleExoPlayer) videoPlayerView.getPlayer()).prepare(videoSource);
// ะฃะบะฐะถะตะผ ัะตะบัััั ะฟะพะทะธัะธั ััะฐะทั ะฟัะธ ะทะฐะณััะทะบะต ะฒะธะดะตะพ
// (ะฒ ะบะพะผะตะฝัะฐั
ััะพ-ัะพ ะฟะธััั ััะพ-ัะพ ะฟัะพ ะดะฐัะฐัะพััั, ะบะพัะพััะต ะฟะพะดะดะตัะถะธะฒะฐัั ะธะปะธ ะฝะต ะฟะพะดะดะตัะถะธะฒะฐัั
// ะฟะตัะตั
ะพะดั seek ะฟัะธ ะทะฐะณััะทะบะต, ะฟะพั
ะพะถะต, ััะพ ััะพ ัะธะณะฝั - ะฟัะพััะพ ะดะตะปะฐะตะผ seek ััะฐะทั ะฟะพัะปะต ะทะฐะณััะทะบะธ)
// Exoplayer plays new Playlist from the beginning instead of provided position
// https://github.com/google/ExoPlayer/issues/4375
// How to load stream in the desired position? #2197
// https://github.com/google/ExoPlayer/issues/2197
// ะฒ ััะพะผ ะผะตััะต ะฝะพัะผะปะฐัะฝัะน duration ะตัะต ะฝะต ะดะพัััะฟะตะฝ, ะฟะพััะพะผั ะตะณะพ ะฝะต ะฟัะพะฒะตััะตะผ
//if(seekTo > 0 && seekTo < videoPlayerView.getPlayer().getDuration()) {
if (seekTo > 0) {
// ะฝะฐ 5 ัะตะบัะฝะด ัะฐะฝััะต
videoPlayerView.getPlayer().seekTo(seekTo - 5000 > 0 ? seekTo - 5000 : 0);
}
videoPlayerView.getPlayer().setPlayWhenReady(true);
}
}
์๋ ค์ง ๋ฌธ์
- Google/YouTube ๊ณ์ ์ ๋ก๊ทธ์ธํด์ผ ํ๋ ์ฐ๋ น ์ ํ์ด ์๋ ๋์์์ ์ฌ์๋์ง ์์ต๋๋ค.
์ :
์กฐ์ธ: ๊ทธ๋ฌํ ๋น๋์ค๋ฅผ ๋ธ๋๋ฆฌ์คํธ์ ์ถ๊ฐํ๊ฑฐ๋ ๋น๋์ค ์์ฑ์์๊ฒ ์ค์๋ก ์ค์ ๋ ์ ํ์ ์ ๊ฑฐํ๋๋ก ์์ฒญํ์ญ์์ค.
- ์๋น์ค๊ฐ ๊ธธ์ด๋ฅผ XNUMX์ผ๋ก ๋ฐํํ๋ ์ผ๋ถ ๋ฐฉ์ก ๋น๋์ค๋ ์ฌ์๋์ง ์์ต๋๋ค. (ํด๋น ๋น๋์ค์ ๊ฒฝ์ฐ ๋ชฉ๋ก๊ณผ ๊ฐค๋ฌ๋ฆฌ์ ๊ธธ์ด๋ "[dur undef]"๋ก ํ์๋ฉ๋๋ค.)
์ :
์กฐ์ธ: ๊ทธ๋ฌํ ๋น๋์ค๋ฅผ ๋ธ๋๋ฆฌ์คํธ์ ์ถ๊ฐํ์ธ์.
- ์ง์ ๋งํฌ๋ฅผ ํตํด์๋ง ๋ณผ ์ ์๋ ๋์์์ ์ฌ์ฉ์์ ๋์์์ ๋ชจ๋ ๋ค์ด๋ก๋ํ๋๋ผ๋ ๋ก์ปฌ ์ฌ์๋ชฉ๋ก์ ํฌํจ๋์ง ์์ ์ ์์ต๋๋ค.
์ :
-
๋ก๊ทธ์ธ์ด ํ์ํ์ง ์๊ณ ๋ธ๋ผ์ฐ์ ์์๋ ์ฌ์๋์ง๋ง ํ๋ ์ด์ด์์๋ ์ฌ์๋์ง ์๋ ๊ณต๊ฐ ๋์์์ ๋ฐ๊ฒฌํ ๊ฒฝ์ฐ ๋ฒ๊ทธ ๋ณด๊ณ ์๋ฅผ ๋ณด๋ด์ฃผ์ธ์(์ ๋ฒ์ ์์ ๋ฌธ์ ๊ฐ ์ด๋ฏธ ํด๊ฒฐ๋์์ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค) ์๋ก์ด ํ์ดํ ์ถ์ถ๊ธฐ ์ด ๋ฒ์ ์ผ๋ก ์ด์ ๋ธ๋ฆฌ๋ง ์ ๋ฐ์ดํธํ๋ฉด ๋ฉ๋๋ค.
์๋ฅผ ๋ค๋ฉด ). -
์ธํฐ๋ท ์๋๊ฐ ๋๋ฆฌ๋ฉด ์ธํฐํ์ด์ค ์๋๊ฐ ๋๋ ค์ง ์ ์์ต๋๋ค(๊ทธ๋ฌ๋ ๊บผ์ง์ง๋ ์์).
๊ทธ ๊ฒฐ๊ณผ,
๋ด ์๋ค์ ํ๋ธ๋ฆฟ์์ Android ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํํ ์ ์๋ ์ผ์ฑ ์ค๋งํธ TV๋ก ์ฎ๊ฒผ์ต๋๋ค. ๋ฐ๋ผ์ ์ต๊ณ ์ ์๋ ๋ณดํธ๋ ์ฌ์ ํ ๊ฐ์ธ์ ์ธ ๊ฒ์ ๋๋ค.
ํ์ง๋ง ์ด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ๊ฐ ์ง์ ์ฌ์ฉํ ์ ์์ ๋งํผ ์ถฉ๋ถํ ํธ๋ฆฌํ๋ค๋ ๊ฒ์ด ๋ฐํ์ก์ต๋๋ค. ์ด๊ธฐ ์์ ๋ฒ์ ์ ์ฒซ์ธ์์ ๋ง์น ๋ค๋ฅธ ์ธ๊ณ์ ์ ์๋ ๋ฏํ ๋๋์ด์์ต๋๋ค. ๋ชจ๋ ์ฝํ ์ธ ๋ YouTube์์ ๋ค์ด๋ก๋๋์ง๋ง ์ด๋ ๋ ์ด์ YouTube๊ฐ ์๋๋ผ ๋ง์น ๋์์ ์ง๋ค๋ฅผ ๊บผ๋ด ์ ๋ฆฌ๋ณ์ ๋ฃ๋ ๊ฒ์ฒ๋ผ ์์ ํ๊ณ ํต์ ๋๋ ๋ค๋ฅธ ๊ฒ์ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ๊ฒ์ ๊ถ์ฅ ์ฌํญ์ ๊ดํ ๊ฒ์ ๋๋ค.
์ถ์ฒ : habr.com