【ibisPaint】I bought a pen tablet for Android!!

안녕 여러분, Misa입니다~ 제가 아마존에서 뭔가를 샀는데요 바로 이겁니다! 펜 타블렛!!!! 잠깐 거기 당신! 이건 ibisPaint랑 관련없잖아! 라고 말하는게 들리네요 영상 닫지 말아주세요! 이 영상은 압력감지를 사용하는 안드로이드용 펜 타블렛을 소개하는 겁니다! 아직 시도 안해봤으니깐 같이 어떤 느낌인지 확인해보죠! 좋아요, 제품상자를 꺼냈습니다! 제품 모델명은 HUION HS64 가격은 39달러! 가격이 매우 합리적이네요 하지만 더 중요한 것은 사용하기 편하게 몇가지 부속품이 있다는것! 한번 열어보죠! 개봉!!! 정말 감사합니다! 이 얼마나 공손한 펜 타블렛인지!! 안에 무엇이 들어있는지 봅시다! 펜타블렛 무전원 펜 사이드 버튼도 단단하게 붙어있네요! 마이크로 USB 케이블 OTG 어뎁터 두개의 변환 어뎁터가 포함되어 있네요! 이쁘네요! USB C타입 USB 마이크로 타입 안드로이드 기기는 제가 지금까지도 사용중인 넥서스 6 입니다 마이크로 USB! 펜촉이 여기 안에 있었네요! 얼른 연결하도록 하죠! L모양의 선을 타블렛에 연결해줍니다 단단하게 연결해주세요! 다른 전환 어뎁터는 여기에 연결해주세요! 케이블이 연결됬네요! 그래서잘 작동할까요? 커서가 움직이네요! "+"를 눌러 새로운 켄버스를 가져오고, 바로 그려봅시다! 그리기 아주 편한데, 뭐라 해야할지 모르겠네요! 그리고 여러분들이 가장 관심이 있는게 뭔지 알것같네요 압력감지는 어디에 있는가?! 확인해봅시다! 화면의 도구 선택창에서, 설정을 열면

압력감지 사용!!! 대단하지 않나요?! 하!? 오!? 어!? 잠깐?! 대단해!! 그리기 편함과 동시에, 압력감지도 잘되네요! 39달러는 너무 싸네요! 앞으로 안드로이드에게 강한 아군이 되어주겠네요! 좋아, 다음! 압력감지에 대한 다른 유용한 기능이 있습니다! 예를 들자면 펜의 사이드 버튼! 이 버튼에 대해 설정에서 커스터마이징을 할수있답니다! 버튼1번은 낮은 버튼입니다(아랫부분) 이건 '되돌리기'가 사용되게 설정되어있네요 여기서 커스터마이징을 할수있어요! 버튼 1번을 클릭하면, 아주 간단하게 취소됩니다! 이 얼마나 편리한 기능인지! 평소대로 그려보겠습니다! 켄버스의 사이즈는 768 x 1024 ! 전 그림그릴때 화면을 터치하지않아서, 제 손에 방해받지않고 그리기 쉽네요! 그림그릴때 화면의 크기때문에 걱정할 필요도 없습니다! 만약 당신이 큰 화면의 안드로이드 타블렛을 가지고 있다면, PC와 펜 타블렛을 사용하는것과 같은 느낌을 받을수 있기 때문에, 당신이 안드로이드 펜 타블렛 유저라면, 전 이 제품을 진심으로 추천해요! 두손가락으로 확대와 축소, 그리고 회전이 편하기 때문에, 편안하게 작업할수 있습니다

정말 훌륭하네요! 저에게 상기기켜주네요 처음으로 펜 타블렛을 샀었을때 익숙해지는데 어려움을 겼었던게 기억이 나네요 제가 가장 많이 한 연습은 트레이싱! 계속 하다보면 익숙해질거예요! 언젠가 익숙해진다면, 정말 유용한 제품이기 때문에, 연습하는데에 아무런 문제가 안될겁니다! 끝! ☆

。:*☆。:*・゚ ☆。

:*추가적으로☆。:*・゚ ☆。:*☆

。:* 큰 안드로이드 타블렛으로 그려봅시다! 켄버스의 크기는 768 x 768 입니다 스마트폰으로도 쉽게 그릴수 있습니다만, 커다란 화면에서는 더 쉽게 조작할수 있습니다! 펜 타블렛 화면도 사용할수 있으니, 얼마나 훌륭한지요! pC보다 그리기 편하네요! 그리기 정말 재밌네요! 끝났습니다! 마지막으로, 몇몇개의 지원되지 않는 모델들이 있으니, 디바이스에서 작동이 할수 있는지 제조사를 확인해주세요 함께 확인해요! 봐주셔서 감사합니다! 아마존으로 떠나요!!

ExoPlayer: Flexible Media Playback for Android (Google I/O '17)

[음악 재생] OLIVER WOODMAN : 제 이름은 Ollie입니다 앤드류입니다

이곳에서 많은 사람들을 만나서 반갑습니다 나는 긴 하루 였음을 안다 그리고 오늘 우리는 당신에게 미디어 재생에 관해 이야기 할 것입니다 ExoPlayer를 사용하여 Android에서 우리가 다룰 내용에 관해서, 우리는 정말로 모든 사람들을 위해 약간의 노력을 기울일 것입니다

이 이야기에서 이것이 의미하는 것은 우리가 시작할 것입니다 몇 가지 기본 사항이 있습니다 그래서 우리는 ExoPlayer가 무엇인지 간략하게 논의 할 것입니다 우리는 몇 가지 기능에 대해 논의 할 것입니다

우리는 당신에 관해서 조금 이야기 할 것입니다 ExoPlayer를 사용하고 싶을 수도 있습니다 그리고 우리는 간단한 예제를 통해 어떻게 시작할 수 있는지 보여줍니다 그 후, 아마도 이미 더 많은 사람들을 위해 ExoPlayer에 익숙하다면 좀 더 진보 된 주제를 통해 아주 빨리 달릴 수 있습니다 그래서 우리는 미디어 구성에 대해 이야기 할 것입니다

ExoPlayer v2의 새로운 기능입니다 우리는 ExoPlayer의 내부에 대해 이야기 할 것입니다 어떻게 작동하는지 조금씩 설명하겠습니다 재생이 실제로 어떻게 작동하는지 설명합니다 그리고 마침내 우리는 그 지식을 바탕으로 우리가 어떻게 당신이 진짜로 주문을 받아서 만들 수 있는지에 대해서 이야기하기 시작할 것입니다

ExoPlayer가 일치하는 작업을 잘 수행하도록 미세 조정 특정 유스 케이스 좋아, 시작하자 ExoPlayer 란 무엇입니까? 따라서 ExoPlayer에 익숙하지 않은 사용자의 경우 이미 Android 용 미디어 재생 라이브러리입니다 그것은 Jelly Bean 이상에서 작동합니다 자바로 작성되었습니다

Android 개발자로서 이미 언어로되어 있습니다 네가 가장 잘 알고있는 것 ExoPlayer를 원할 경우 종속성으로 포함 시키십시오 다른 Java 라이브러리를 포함하는 것처럼 말입니다 또한 오픈 소스이기도합니다

그래서 만약 당신이 체크 아웃 영감을 이 이야기 후에 우리의 소스 코드, 당신은 쉽게 그것을 할 수 있습니다 그리고이 프레젠테이션의 마지막 슬라이드 실제로 GitHub 저장소에 대한 링크가 있습니다 기능면에서 우리는 먼 길을왔다 우리는 처음에 소스 ExoPlayer를 열었 기 때문에 2014 년 Google I / O에 돌아 왔습니다 초기 릴리스에서는 DASH 및 SmoothStreaming 적응 형 미디어 재생, 주로 조각 형식의 MP4를 컨테이너 형식으로 사용합니다

또한 TTML 캡션과 공통 암호화도 지원했습니다 그 후 우리는 지원을 추가했습니다 HLS 및 MPEG-TS 컨테이너 포맷의 경우, 추가 캡션 형식도 제공합니다 그 이후로 우리는 정말로 바빴습니다 더 많은 전통적인 미디어에 대한 지원 추가 MP3, MP4, Ogg 및 Matroska와 같은 형식을 지원합니다

우리는 또한 다른 여러 가지 확장 기능을 제공합니다 ExoPlayer 확장은 어떤 방법입니까? 다른 라이브러리의 기능을 ExoPlayer에 가져 오는 것 따라서 구체적인 예로서 OkHttp를 네트워킹으로 사용한다면 귀하의 응용 프로그램의 나머지 부분에 대한 스택, 실제로 똑같은 네트워킹을 사용하고 싶을 수도 있습니다 미디어 재생을위한 스택 그리고 OkHttp 확장 기능을 사용하여이를 수행 할 수 있습니다

그와 똑같은 네트워크 스택을 내부에서 사용할 수 있습니다 ExoPlayer 그래서 이것은 작년 중반까지 우리를 데려옵니다 그리고이 시점에서 우리는 좀 뒤로 물러났습니다 우리는 꽤 심오한 건축상의 변화를 만들었습니다

플레이어 내부 우리는 ExoPlayer 버전 2를 출시했습니다 이 릴리스에서 우리는 지원을 받았다 MultiPeriod DASH 지원과 같은 고급 기능을 사용하려면, gapless 오디오 및 미디어 구성, 우리가 아주 말할 게있는 것이지 한참 동안 많이

동시에 우리는 ExoPlayer를 사용하기 쉽게 만들려고 노력했습니다 그래서 우리는 간단한 ExoPlayer보기를 추가했습니다 죄송합니다 단순한 ExoPlayer는 다소 높은 수준입니다 ExoPlayer를 사용하기위한 API 및 일부 재생 UI 당신이 얻을 수있는 구성 요소 정말 빨리 상자에서 시작했습니다

그 이후로 우리는 더 많은 기능을 추가했습니다 특히 우리는 최근에 지원을 추가했습니다 가변 속도 재생 용 그리고 우리는 또한 우리의 능력을 키워 왔습니다 재생 된 미디어를 캐시 할 수 있습니다

그리고 이것은 오늘날 우리가있는 곳입니다 그리고이 슬라이드에서 가져온 핵심 요소 반드시 이해해야하는 것은 아닙니다 그 위에있는 모든 것 특정 유스 케이스에 맞는 것 같습니다 이 기능 중 아주 작은 하위 집합 만 있으면됩니다

여기에있는 주요 테이크 아웃은 실제로 ExoPlayer입니다 완전히 완벽한 기능을 갖춘 미디어 라이브러리로 진화했다 지금 Android 용 미디어 재생 사용 사례가있는 경우, 아마 ExoPlayer는 당신이하고 싶은 것을 지원할 것입니다 이제 우리는 거기에있는 특징들에 대해 조금 알고 있습니다

ExoPlayer를 사용하는 것이 적절한 지에 대해 이야기 해 봅시다 그리고 명백하게 대안을 사용하는 것이 의미가있을 때 ExoPlayer는 Android의 MediaPlayer API에 내장되어 있습니다 따라서 주목할 첫 번째 점은 MediaPlayer 다시 안드로이드 시작 부분까지 작동합니다 ExoPlayer는 Jelly Bean 이상입니다 이전보다 훨씬 적은 문제입니다

실제로 활성 Android 기기의 약 2 % 만 사용됩니다 아직 안드로이드의 이전 버전에서 그러나 제공에 대해 그 2 %에 대한 지속적인 지원을 한 다음 MediaPlayer 최선의 방법이 될 것입니다 사용 사례에 따라 이러한 솔루션 각각 MediaPlayer가 가장 적합합니다 간단한 사용 사례

그래서 MP3를 가지고 있다면 APK에 번들로 묶어 놓은 것일 수도 있습니다 앱 내에서 재생하려면 MediaPlayer를 당신을 위해 잘 작동 할 것입니다 어쩌면 당신은 이미 그것을 사용하고있을 것입니다 그리고 전환해야하는 실제 이유가 없습니다 ExoPlayer가 실제로 자체적으로 제공되는 곳 고급 사용 사례를위한 것입니다

DASH, SmoothStreaming을 포함한 모든 종류의 적응 형 스트리밍 및 HLS를 사용하고 실제로 일부 고급 기능을 활용하고자합니다 ExoPlayer는 미디어 구성 및 캐싱과 같은 기능을 제공합니다 염두에 두어야 할 또 다른 차이점 이 두 API가 설계된 방식입니다 MediaPlayer는 대단히 블랙 박스입니다 당신은 내부 동작에 대해 많은 통제력을 갖지 못합니다

플레이어의 반대로 ExoPlayer는 실제로 디자인되었습니다 매우 맞춤화되고 확장 가능해야합니다 그리고 당신은 정말로 발굴하고 시작할 수 있습니다 ExoPlayer 내부의 다양한 다이얼을 미세 조정하기 원하는 방식으로 일을 처리 할 수 ​​있습니다 그래서 ExoPlayer는 아마 당신이 아마 최고 일 것입니다

고급 사용자이고 이러한 것들을 조정할 수 있습니다 마지막으로 중요한 고려 사항 플레이어가 실제로 어디에 있는지의 차이를 고려하는 것입니다 MediaPlayer 및 ExoPlayer를 사용하면 오래 살 수 있습니다 따라서 MediaPlayer를 사용할 때, 왼쪽에서 볼 수 있듯이, MediaPlayer 구현은 실제로 안드로이드 운영체제에서 그리고 여기에있는 부분은 여러분이 보는 수평선입니다

아래는 운영체제입니다 ExoPlayer를 사용하면 실제 플레이어 구현은 응용 프로그램의 일부로 제공됩니다 그리고 그것은 정말로 아주 낮은 수준의 미디어로 전달됩니다 주로 액세스를 제공하기위한 플랫폼의 API 하드웨어 디코더 그렇다면 왜 이것이 중요한가? 한 가지 이유는 Android의 미디어 파워 실제로 시간이 지남에 따라 진화했다 그래서 그 결과로, 당신이 얻는 행동 Android 출시부터 Android 출시까지 약간 다를 수 있습니다

ExoPlayer와는 대조적으로, 우리는 장점이 있습니다 따라서 플레이어의 단일 버전을 배송 할 수 있습니다 응용 프로그램 내부 그리고 당신은 똑같은 버전을 얻을 것입니다 모든 버전의 Android에서 사용할 수 있습니다

ExoPlayer는 실제로 매우 일관된 경험을 제공하기 위해 더 좋은 위치에 있어야합니다 이 모델의 또 다른 중요한 이점 새 기능을 추가 할 때 일반적으로 ExoPlayer를 사용하여 Jelly Bean으로 되돌아가는 지원, MediaPlayer의 새로운 기능인 반면 후속 릴리스에서만 사용할 수 있습니다 Android의 이러한 이점에 대한 흥미로운 예 실제로 가변 속도 재생을 지원합니다 그래서 이것은 Marshmallow의 MediaPlayer에서 지원되었습니다 그리고 최근에는 ExoPlayer에서 지원을 추가했습니다

우리는 새로운 저수준에 대한 의존성이 없었기 때문에 미디어 API 또는 플랫폼의 모든 것, 우리는 Jelly Bean에게 지원을 추가 할 수있었습니다 우리가 다음에 발견 한 것은 실제로 재생 속도 및 피치 조정 구현의 버그 MediaPlayer와 ExoPlayer 모두에 영향을 미쳤습니다 그리고 우리는 그 버그를 다시 고칠 수있었습니다 ExoPlayer가있는 Jelly Bean으로 돌아 가면, MediaPlayer는 O 이상에서만 사용할 수 있습니다 그래서이 시점에서, 당신은 몇 가지 이점을 볼 수 있기를 바랍니다

ExoPlayer가 있습니다 하지만 너는 네가 그것을 사용하는 것이 더 확신 할 수있다 어떤 사람들이 이미 그것을 사용하고 있다는 것을 알고 있다면 그리고 우리가 실제로 ExoPlayer는 Google 자체 애플리케이션에서 매우 광범위하게 사용됩니다 가장 눈에 띄는 YouTube는 분명합니다

거대한 비디오 스트리밍 서비스 및 Google Play 무비 및 Google 포토와 같은 애플리케이션 실제로 우리는 실제로 강력한 채택을 보았습니다 넓은 개발 공동체에서도 마찬가지입니다 그래서 여기에 몇 가지 응용 프로그램이 있습니다 일부 ExoPlayer를 사용하거나 다른 용도로 사용할 수 있습니다 그리고 그것은 단지 어느 정도는 아닙니다

실제로 Play 스토어에는 140,000 개가 넘는 응용 프로그램이 있습니다 ExoPlayer를 사용하고 있습니다 앱 중 하나 인 경우 감사합니다 당신의 입양을 위해 그리고 우리에게 의견을 계속 보내주십시오 우리와 실제로는 정말 중요합니다

우리가하는 일을 많이 안내합니다 다음 번에는 몇 가지 코드로 다이빙을 할 것입니다 간단한 예를 보여줍니다 그 때문에 나는 너를 앤드류에게 넘기겠다 앤드루 루이스 : 안녕하세요

[박수 갈채] 기존 앱이 있다고 가정 해 보겠습니다 MP4 플레이어를 추가하고 싶습니다 그 응용 프로그램에 – 그래서 그냥 간단한 비디오를 보여주는 기존 앱에서 최소한의 변화를 겪을 것입니다 ExoPlayer를 사용해야합니다 첫 번째 단계는 ExoPlayer에 대한 의존성 그리고 두 가지 주요 옵션이 있습니다

이리 ExoPlayer 라이브러리 전체를 가져올 수도 있습니다 또한 적응 형 스트리밍 형식에 대한 지원도 포함됩니다 DASH 및 HLS와 유사합니다 그리고이 줄은 build

gradle 파일에서 사용할 수 있습니다 이것은 주방 싱크 옵션의 일종입니다 그래서 대안은 선택하고 선택할 수 있다는 것입니다 ExoPlayer 라이브러리의 특정 모듈 너는 필요해 이 예제에서는 종속성을 추가 할 것입니다

주요 플레이어가 포함 된 핵심 라이브러리 분명히 MP4와 같은 일반 미디어도 지원합니다 및 MP3 그리고 UI 라이브러리에는 여기에도 의존성이 있습니다 SimpleExoPlayerView를 가져옵니다 최소한이지만 사용자 정의 할 수있는 플레이어입니다

앱에 넣을 수 있습니다 그래서 우리가 의존성을 추가하면, 다음 단계는 일부 코드 스 니펫을 추가하는 것입니다 당신의 활동에, 그것은 플레이어를 창조하고 그것을 사용할 것입니다 그래서 우리는이 ExoPlayer 팩토리를 가지고 있습니다 여기에는 플레이어 인스턴스를 만드는 몇 가지 방법이 있습니다

그리고 이것을 사용하는 것이 가장 쉽습니다 컨텍스트와 트랙 선택기가 필요합니다 그리고이 간단한 사용 사례를 위해 우리는 DefaultTrackSelector를 사용합니다 당신이하고 싶은 거의 모든 것에 대해 합리적인 기본값을 가지고 있습니다 플레이어를 만든 후에는 다음 단계 앱 레이아웃에보기를 드롭하는 것입니다

setPlayer를 호출하여 플레이어에 바인딩합니다 방법 이제 가장 중요한 것은 플레이어에게 우리가 놀고 싶어 그리고 이것을 위해 우리는 MediaSource를 사용할 것입니다 ExoPlayer에서 재생할 수있는 모든 것은 MediaSource입니다

미디어 로딩을 담당합니다 플레이어에게 제공하는 것입니다 그래서 우리는 ExtractorMediaSource를 만들 것입니다 MP4, MP3, Matroska 파일 등이 있습니다 그래서 당신은 그것을 prepare 메소드에 넘깁니다

그리고 setPlayWhenReady를 호출합니다 플레이어에게 버퍼링이 완료 되 자마자 재생이 시작되면 재생이 시작됩니다 그리고 마침내 당신이 재생이 완료되면 플레이어 플레이어가 코덱과 같은 시스템 리소스를 보유하기 때문에 버퍼에 메모리를 사용합니다 따라서 이러한 코드 스 니펫은 일반적으로 앱의 활동 라이프 사이클 메소드로 이동하십시오 그래서 이것은 당신이 가진 것에 대한 비디오입니다

나는 런던의 스카이 라인에 대한 멋진 비디오를 가지고있다 기본 재생 기능이 있음을 알 수 있습니다 재생 및 일시 중지 단추 및 탐색 모음과 같은 컨트롤 그래서 이것을 시험해보고 싶다면, I / O의 일부로 코드 테이블이 게시됩니다 당신은 가서 시도 할 수 있습니다

개발자 가이드도 있습니다 우리의 프로젝트 페이지에서이 단계들을 안내 할 것입니다 제가 언급했듯이, 여러분이 할 수있는 모든 것 미디어 소스입니다 그리고 그것은 플레이어를위한 미디어를로드하는 책임이 있습니다 그리고이 예제에서는 ExtractorMediaSource를 사용했습니다

실제로는 다른 고급 미디어가 있습니다 소스를 사용할 수 있습니다 DASH에 대해 들어 보셨습니까? 스트리밍을위한 사양입니다 자질 간의 적응을 허용한다 다양한 네트워크 조건을 처리합니다

DASH 지원을 위해 DASHMediaSource를 제공합니다 우리는 또한 지원을위한 HLS 미디어 소스를 가지고 있습니다 HTTP 라이브 스트리밍과 SmoothStreaming을위한 미디어 소스 최근의 v2 릴리스에서는 또한 MediaSources의 새로운 카테고리를 추가했습니다 구성을 위해 설계되었습니다

그리고 구성에 의해 우리는 함께 합류하는 것을 의미합니다 다른 미디어 소스 왜 우리가 이것을하고 싶습니까? 글쎄, 나는 예제를 통해 갈 것이다 그럼 우리가하고 싶은 비디오가 있다고 가정 해 봅시다 또한 별도의 파일에있는 일부 자막은 SRT 파일

이 경우 ExtractorMediaSource를 만들 수 있습니다 비디오를로드하려면 단일 샘플 미디어 소스가 필요합니다 SRT 파일을로드하려고합니다 그리고 나서 비디오와 함께 자막을 재생할 것입니다 이제 너 스스로 시도하고 할 수있어

플레이어 위치를보고 및 재생 위치를 자막과 동기화하는 단계 당신이 보여주는거야 그러나 이것은 일반적으로 일반적으로하기가 실제로 어렵습니다 MergingMediaSource를 사용하는 것이 훨씬 쉽습니다 그리고 MergingMediaSource는 비디오를 가져옵니다 자막을 재생하고 싶다

당신을 위해 모든 것을 처리합니다 그래서 그것은 동기화를 처리 할 것입니다 그런 다음 플레이어에 표시됩니다 당신이 작곡을 사용할 또 다른 시간은 재생 목록을위한 것입니다 그래서이 경우에, 당신은 MP3의 앨범이 있다고 다시 재생하고 싶습니다

너 스스로 시도하고 할 수있어 첫 번째 스트림을 재생 한 다음 스왑 아웃하여 다음 소스 하지만 플레이어가이기 때문에 큰 일이 아닙니다 소스를 바꿀 때 버퍼링됩니다 그래서 우리는 ConcatenatingMediaSource를 추가했습니다, 어떤 소스의 목록을 당신이 걸립니다 함께 결합하고 그들을 연주하고 싶다

일관된 버퍼링 정책으로 백 – 투 – 백 따라서 플레이어에게 3 초의 미디어가 있다고 말하면 항상 버퍼링 된 다음에는 전환을 가로막는 경우에도 그러한 경우인지 확인하십시오 한 소스에서 다음 소스로 또한 gapless 재생 메타 데이터도 지원합니다 따라서 MP3 파일을 완전히 재생할 수 있습니다

원활한 재생 또한 구성도 매우 유연합니다 그래서 우리가 본 두 가지 예를 결합 할 수 있습니다 따라서 병합 된 소스와 동영상을 연결합니다 이전에 자막을 만들었습니다

그리고 그렇게한다면, 이것이 당신이 얻게 될 것입니다 첫 번째 동영상이 재생됩니다 그런 다음 첫 번째 동영상이 완료되면 우리는 다음 비디오로 자연스럽게 전환합니다 자막이 올라 오는 것을 볼 수 있습니다 우리가 기대했던대로

그래서 이것은 위대합니다 우리는 이러한 미디어 작품을 재생할 수 있습니다 그래서 우리는 이것을 구현했습니다 그리고 나서 우리는 생각했습니다 잠깐 만요

이 seekTo 메서드가 플레이어에 있습니다 하지만 이제 우리는 재생하고 싶은 재생 목록을 가지고 있습니다 여러 소스가 있습니다 타임 스탬프는 정보가 충분하지 않습니다 당신이 더 이상 추구하고 싶은 곳을 아는 것

그래서 우리는 이것에 대해 생각하고 생각했습니다 재생할 수있는 다른 유형의 미디어 소스, 라이브 미디어 소스처럼 그리고 우리는 앱에 폭로하는 방법이 정말로 필요하다는 것을 깨달았습니다 미디어 소스의 구조 그리고 어떤 미디어를 사용할 수 있습니다 그래서 어떤 것을 알 필요가 있는지의 문제를 해결하기 위해서 소스를 찾으려는 경우 매개 변수를 추가했습니다

플레이어에게 소스를 알려줍니다 원하는 재생 목록에 있습니다 그리고 나서 우리는 필요하다고 생각했습니다 사용 가능한 미디어에 대한 설명 그래서 타임 라인이라는 새로운 데이터 구조를 추가했습니다

타임 라인은 기본적으로 표현입니다 미디어 소스에서 사용할 수있는 모든 미디어를 그리고 창 목록으로 구성됩니다 각 창은 재생 목록의 한 항목으로 이동합니다 그리고 그것은 미디어의 어떤 부분을 묘사합니다 당신은 어떤 주어진 순간에 추구 할 수 있습니다

그래서이 예제를 보여 드리겠습니다 조금 더 명확하게 해줍니다 그래서 우리는 하나의 소스를 가지고 있다고 상상해 봅시다 당신은 어디에서나 찾을 수 있습니다 여기서 빨간 선은 하나의 창을 나타냅니다

왼쪽의 점은 이 미디어 소스의 기본 시작 위치는 0입니다 그래서 플레이어가 소스에 도달하면, 그것이 연결된 경우에는 시간이 0이 될 것입니다 그리고 그 창문은 끝까지 펼쳐져 있습니다 미디어 소스의 지속 시간 더 흥미로운 경우는 두 소스를 연결하는 경우입니다

함께 그리고이 경우, 당신은 타임 라인으로 끝납니다 두 개의 창이 있습니다 보시다시피 두 창 모두에서 시작 위치는 해당 소스의 시작 부분에 있습니다 라이브 미디어 소스가 있다면 어떨까요? 이 경우 타임 라인은 실제로 동적입니다

실시간 이벤트가 진행됨에 따라 더 많은 미디어 창에서 사용할 수있게되었습니다 그리고 기본 위치가 라이브 에지를 추적 중입니다 그리고 라이브 이벤트가 완료되면, 기본 위치가 처음으로 다시 스냅됩니다 그래서 이것은 정규 스트림이됩니다 처음부터 재생이 시작되고 어떤 직책을 추구 할 수있다

그리고 우리는 이것을 바탕으로 일반 스트림과 라이브 스트림의 연결 그리고 이것은 당신이 기대하는 방식으로 작동합니다 따라서 소스를 연결하면 끝나는 타임 라인으로 끝나라 창의 연결 그 개별 소스 중 따라서이 타임 라인이 노출 된 것을 볼 수 있습니다

ExoPlayer의 최상위 API에서 현재 타임 라인을 얻을 수 있습니다 플레이어를 찾을 때 창 인덱스를 전달할 수 있습니다 재생 목록의 두 번째 항목을 찾으십시오 특정 오프셋에서

그리고이 창에 대한 세부 정보를 검사 할 수 있습니다 창문이 어디서 시작되고 얼마나 오래 있는지 지금은 Ollie로 돌아가서 내부에 대해 조금 이야기합니다 선수들의 올리버 우먼 : 앤드류가 말했듯이, 이제 우리는 ExoPlayer에 대해 좀 더 깊이 들어가기로했습니다 내부적으로 일어나는 일에 대해 재생 중

그리고 우리가이 일을 할 이유는 우리가 얘기 한 후에 내부 구성 요소의 우리가 어떻게 그것들을 커스터마이징 할 수 있는지에 대해 이야기하고 플레이어를 특정 유스 케이스에 맞게 미세 조정할 수 있습니다 여기 ExoPlayer가 있습니다 재생할 MediaSource를 받았다 중요한 내부 구성 요소는 무엇입니까? 첫 번째 중요한 구성 요소 언급해야 할 것은 렌더러입니다 렌더링을 담당하는 렌더러 미디어의 단일 구성 요소

따라서 VideoRenderer는 비디오 만 디코딩하고 표시합니다 AudioRenderer도 마찬가지로 해독 해 출력합니다 그냥 오디오 실제 ExoPlayer 인스턴스는 텍스트 및 메타 데이터와 같은 항목에 대한 추가 렌더러 보유 게다가 그러나 우리는이 다이어그램에서 이들을 생략 할 것입니다

단순함을 위해서 중요한 또 다른 구성 요소는 TrackSelector입니다 미디어 소스가 실제로 노출 될 수 있음 플레이어가 재생할 수있는 여러 개의 트랙 특히 DASH 또는 HLS 적응 재생이있는 경우, MediaSource가 실제로 여러 비디오 스트림을 노출 할 수 있습니다 다른 해상도에서, 그리고 아마 여러 오디오 언어 게다가

그리고 TrackSelector의 역할 해당 트랙의 하위 집합을 선택하려면 플레이어가 버퍼링하고 재생해야합니다 우리가 얘기해야 할 마지막 구성 요소는 LoadControl입니다 LoadControl에는 실제로 두 개의 작업이 있습니다 첫 번째 작업은 MediaSource에 알려주는 것입니다 그것이이 시점에서 버퍼링되어야하는지의 여부

그리고 이것은이 도표에 표시되어 있습니다 왼쪽에있는 녹색 점으로 그래서 우리는 아직 재생을 시작하지 않았기 때문에, 우리는 아무 것도 버퍼링하지 않습니다 따라서 MediaSource를 나타내는 것은 녹색입니다 버퍼링해야합니다

두 번째 임무는 재생할 때 플레이어에게 알려주는 것입니다 실제로 시작할 수 있습니다 이것은 오른쪽 점으로 표시됩니다 그리고 우리는 아직 어떤 언론도 가지고 있지 않기 때문에, 분명히 너무 빨리 재생을 시작할 수 있으므로 빨간색입니다 우리가 언급해야 할 구성 요소 중 하나는 데이터 소스입니다 MediaSources는 데이터 소스를 사용하여 실제 미디어를로드합니다

재생을 위해 플레이어에게 제공 할 것입니다 그래서 몇 가지 주요 구성 요소를 제공했습니다 그러나 어떻게하면되는지에 대해 조금 이야기 해 봅시다 이러한 구성 요소는 실제로 재생 중에 상호 작용합니다 아직 우리는 아무것도 버퍼링하지 않았습니다

그리고 LoadControl은 MediaSource에게 그것을 버퍼링해야합니다 MediaSource가 데이터로드를 시작합니다 데이터 소스를 통해 그리고 충분한 미디어가로드 된 후, 아마 보통의 미디어 파일에 대한 헤더 일뿐입니다 MediaSource가 해결할 수있을 것입니다 트랙을 실제로 플레이어에게 노출시킬 수 있습니다

그리고 이것은 TrackGroups라는 것을 노출시킴으로써 이것을합니다 이제 우리는 TrackSelector가 실제로 재생할 트랙을 선택합니다 그러나 TrackSelector는 다른 것을 필요로합니다 그리고 다른 이유가 필요한 이유 다른 장치가 다른 기능을 가지고 있다는 것입니다 특히 VideoRenderer 특정 해상도까지만 디코딩 할 수 있습니다

따라서 MediaSource가 4K 비디오 스트림을 노출하더라도, 저가형 기기를 사용한다면 TrackSelector에 대해 이해하지 못한다 실제로 해당 스트림을 선택합니다 우리가 이러한 종류의 능력을 대표하는 방식 플레이어에서 각 렌더러가 뭔가를 노출하고 있습니다 RendererCapabilities 객체를 호출했다 그것은 구체적으로 실제로 처리 할 수있는 것을 설명합니다

다음은 TrackGroups RendererCapabilities가 TrackSelector에 보내집니다 TrackSelector는 마술을합니다 선택을 생성합니다 그리고 그 선택은 MediaSource로 돌아갑니다 이 시점에서 MediaSource는 알고 있습니다

버퍼링 할 것이기 때문에 트랙 선택이 무엇인지 알고있다 그래서 몇몇 버퍼를 할당한다 물론 우리는 아직 실제로 재생을 위해 유용한 미디어를로드했습니다 LoadControl은 여전히로드 할 MediaSource를 알려줍니다 따라서 MediaSource는 계속해서 데이터를로드합니다

버퍼를 채우기 시작합니다 그리고 여기서 볼 수있는 것은 곧 이러한 버퍼가 가득 차기 시작하면, 렌더러는 실제로 그 버퍼로부터 소비되기 시작한다 상기 미디어 데이터를 그들의 디코더를 통해 공급하는 단계로서, 재생 준비 그래서 지금 우리는 미디어 버퍼를 가지고 있습니다 렌더러는 약간의 미디어를 해독했습니다 그래서 그들은 일종의 준비가되어 있고 갈 준비가되어 있습니다

그래서 LoadControl은이 시점에서 실제로 재생을 시작하십시오 작은 빨간 원이 녹색으로 변했습니다 물론 MediaSource는 지속적으로 버퍼를 사용하고 있습니다 그리고이 시점에서 우리는 실제로 많은 미디어를 버퍼링했습니다 그래서 왼쪽에있는이 버퍼들은 꽤 꽉 찼습니다

물론 우리는 임의적으로 멀리 버퍼링하고 싶지 않습니다 따라서 LoadControl은이 시점에서 버퍼링을 중지 할 수 있습니다 재생이 계속되기 때문에 렌더러 여전히 소비하고 있습니다 따라서 이러한 버퍼는 다시 유출됩니다 낮은 수준으로

물론 우리는 버퍼가 부족한 것을 원하지 않습니다 LoadControl은 버퍼링을 다시 토글 할 수 있습니다 그래서이 패턴이 떠오르게됩니다 DataSource를 통해 데이터를 가져 오는 중 MediaSource로 보내고 렌더러로 보내야합니다 염두에 두어야 할 또 하나의 복잡성 Andrew가 말했듯이, 당신이 이것에 대해 생각할 때, MediaSource는 실제로 예를 들어, 다른 동영상

그런 동영상의 트랙 선택이 다를 수 있습니다 유효한 그리고이 과정이 계속되면서, 실제로 추가 트랙 선택을 얻을 수 있습니다 동시에 일어난다 여기에서는 계속해서 재생을 시작합니다

버퍼가 채워지고 배수됩니다 그리고이 데이터 패턴이 간헐적으로 읽혀지는 것을 보았습니다 데이터 소스를 통해 지속적으로 소비 됨 렌더러에 의해 이제 중요한 구성 요소가 어떻게 작동하는지 조금 알 수 있습니다 재생 중

우리가 어떻게 커스터마이즈 할 수 있는지에 대해 조금 이야기 해 봅시다 그 내부 행동 Andrew가 이전에 보여준 코드 조각입니다 우리는 ExoPlayerFactory로 ExoPlayer를 만들고 있습니다 그러나 실제로는 더 복잡한 방법이 있습니다

ExoPlayer 생성을위한 것입니다 그리고 당신은 우리가이 플레이어에 주입하고있는 것을 볼 수 있습니다 인스턴스는 정확히 우리가 방금 구성한 구성 요소입니다 그런데 렌더러, TrackSelector, 및 LoadControl 여기에서는 기본 구현을 삽입하는 것입니다

그럼 우리가 어떻게 플레이어를 잡아 당겨 미세 조정할 수 있는지 살펴 보겠습니다 그 중 하나 이제 LoadControl을 살펴 보겠습니다 여기에서는 여전히 기본 구현을 사용하고 있습니다 그러나 실제로 생성자에 변수를 전달할 수 있습니다

그 행동을 조작하는 것 그래서이 기본 LoadControl은 말하고있다 그것은 버퍼에서 15 ~ 30 초 사이에 원하는, 다음과 같은 경우 재생을 시작하려고합니다 25 초가 버퍼됩니다

그렇다면 그 점이 어떤면에서 보입니까? 벽 시계 시간 대 지속 시간 의 미디어가 버퍼에 있습니까? 버퍼가 채워지기 시작합니다 25 초가 지나면 재생이 시작됩니다 작은 오렌지색 점으로 표시됩니다 LoadControl을 사용하면 버퍼링을 계속할 수 있습니다

30 초 버퍼링은 잠시 꺼집니다 그리고 MediaSource 버퍼가 줄어들 것입니다 ~ 15 초이며, 이는 하한입니다 그리고 버퍼링은 다시 켜집니다

그래서 이런 종류의 톱니 패턴을 얻습니다 버퍼링 동작의 측면에서 그래서이 시점에서 분명히 분명합니다 당신은이 행동에 실제로 영향을 줄 수 있습니다 이 번호를 15에서 25로 변경할 수 있습니다

버퍼 허용에 익숙하지 않은 경우 저기를 배수한다 우리는 기본 LoadControl의 작동 방식을 이해했기 때문에, 우리는 새로운 그래프를 보여줄 수 있습니다 그래서 여기서 버퍼는 모든 점에서 더 충만하게 유지됩니다 재생 중 그리고 버퍼링은 훨씬 더 자주 켜고 끕니다

우리가 원하는 걸 결정할 수도 있어요 재생을 시작할 때보다 보수적 인 태도를 취할 수 있습니다 그래서 우리는 값을 25 초에서 10 초로 늘립니다 그리고 우리는 그 차이를 이해할 수 있습니다

이 그래프의 관점에서 이제 수정 된 기본 LoadControl을 사용할 수 있습니다 다시 플레이어에 주입하십시오 그래서 LoadControl이 아니라면? 원하는 실제 버퍼링 정책에 충분히 유연합니까? 그럼 당신은 더 나아갈 수 있습니다 독자적인 LoadControl을 처음부터 구현하십시오

그래서 당신이 가진 방법 중 하나 이것을 구현하면 shouldContinueLoading이라고 불린다 부울을 반환합니다 재생 중에 폴링됩니다 그리고 이것은 정확히 방법입니다 실제로 MediaSource가 버퍼링하는지 여부를 제어합니다

그리고 모든 종류의 행동과 논리를 구현할 수 있습니다 자신의 구현에서 TrackSelector에서도 비슷한 일을 할 수 있습니다 그래서이 경우 실제로 매개 변수를 얻을 수 있습니다 우리는 기본값을 조작 할 수 있습니다

TrackSelector는 실제로 트랙을 선택합니다 여기서는 비디오 트랙을 SD로 제한하고 있으므로 480p입니다 그리고 귀하의 사용자가 귀하의 측정 된 모바일 연결에서 그리고 대역폭이 정말 큰 경우에도, 당신은 아마 그들의 데이터 전부를 아주 빨리 사용하고 싶지 않을 것입니다 품질에 대한 상한선을 유지하고 싶을 수도 있습니다 당신이 제공하는 것

마찬가지로 사용자가 독일어 인 경우, 케이스에 대해 선호하는 오디오 언어를 선택할 수 있습니다 노출 된 오디오 트랙이 여러 개있는 경우 MediaSource에 의해 그리고 매개 변수를 다시 수정할 수 있습니다 선택기에서이 새로운 비헤이비어를 실제로 활성화하십시오 또, TrackSelector의 디폴트 구현 적합하지 않다면 한 단계 더 나아가 구현할 수 있습니다 자신의 TrackSelector

구현해야하는 방법 중 하나 이렇게하면 selectTracks입니다 그리고이 메소드의 서명을 매핑하면된다 이전에 본 다이어그램으로 돌아갑니다 렌더러의 기능을 받고 있습니다 그리고 MediaSource의 TrackGroups, 선택을 생성합니다

물론 같은 트릭을 적용 할 수 있습니다 렌더러에 대해서도 마찬가지입니다 자신 만의 VideoRenderer를 처음부터 구현하기 꽤 고급 사용자 정의입니다, 정말로 원한다면 할 수 있어요 그리고 너는 정확히 너를 잘 처리 해준다 그것을 달성하기 위해해야합니다

그리고 기본 RenderersFactory를 확장 할 수 있습니다 buildVideoRenderers 메소드를 오버라이드 (override) 해, 실제로 자신의 VideoRenderer를 플레이어에 삽입하십시오 일반적으로 생성되는 기본값 대신 앤드루 루이스 : 좋아, 좋아 잘하면 당신은 신흥 패턴을 볼 수 있습니다

맞춤 설정의 각 예에서 저것은 대략 말했다 그래서 첫 번째 단계는 플레이어의 어떤 구성 요소를 사용자 정의해야하는지, TrackSelector이든 LoadControl이든 상관 없습니다 그런 다음 해당 구성 요소의 API를 살펴 봅니다 사용하여 행동을 사용자 정의 할 수있는 방법이 있는지 확인하십시오 말하자면, LoadControl에서했던 것처럼 다른 매개 변수입니다

그게 가능하지 않다면, 당신은 확장 할 수도 실제로 할 수도있다 이 구성 요소의 자체 버전을 처음부터 구현하십시오 그래서 저는 이제 더 많은 커스터마이징 예제를 할 것입니다 이번 MediaSource 쪽에서 그러므로 우리가 승인서를 보내야한다고 상상해보십시오

헤더는 MediaSource가 만드는 각 HTTP 요청을 포함합니다 글쎄, 우리는 우리가 지나가고 있다는 것을 안다 HttpDataSourceFactory에서 그리고 이것은 기본 요청을 얻는 편리한 방법을 가지고있다 속성

그리고 기본 요청 속성을 가져 와서, 우리는 실제로 새로운 헤더를 설정하여 인증 헤더를 설정할 수 있습니다 HTTP 요청에서 일단 그렇게하면 httpDataSourceFactory를 전달합니다 MediaSource에 넣습니다 그리고 그 헤더는 모든 요청에 ​​나타납니다

다른 예를 들어 보겠습니다 사용자가 동영상을 꽤 많이 되 감을 것이라는 것을 알고, 그래서 플레이어가 캐시를 추가하지 않도록 캐시를 추가하려고합니다 반복적으로 동일한 미디어를 네트워크에서로드합니다 ExoPlayer는 당신이 사용할 수있는 간단한 캐시를 가지고 있습니다 이 예에서는 LeastRecentlyUsedCacheEvictor

이것이 작동하게되는 방식은 캐시에는 최대 크기가 있습니다 하지만 미디어가 그보다 더 길다면 미디어가 끝나면 미디어를 완전히 보았다 캐시는 실제로 그것의 시작 부분을 제거하기 시작했다 따라서이 캐시는 CacheDataSourceFactory로 전달됩니다 또한 일반 데이터 소스를 가져와야합니다

캐시 미스가 있고 캐시를 채우는 데 사용됩니다 그리고 CacheDataSourceFactory를 전달합니다 ExtractorMediaSource 이렇게 조금이라도 더 분명하게 보이기를 바랍니다 플레이어와 어떻게 어울리는 지 보자

이전에 우리가 보았던 아키텍처 이 캐시는 실제로 MediaSource 사이에 앉을 것입니다 및 HttpDataSource 그리고 MediaSource가 데이터를 요청할 때, 처음에는 캐시에서 찾아 볼 것입니다 캐시 미스가 있으면 네트워크로 연결됩니다

HttpDataSource를 사용하십시오 그런 다음 요청이 만족되면 그것은 다시 돌아와 캐시를 채울 것입니다 다음에 MediaSource가 요청할 때 같은 덩어리, 그러면 캐쉬에있을거야 그래서 극단적 인 경우의 종류에 대해 이야기했습니다 맞춤 설정으로 MediaSource 제공 또는 귀하가 구현 한 모든 것

그래서 나는 그것을하는 예제를 통해 갈 것입니다 앱을 가지고 있다고 가정 해 보겠습니다 일부 콘텐츠를 보여 주지만 이제는 광고를 나란히 게재하여 해당 콘텐츠에서 수익을 창출하고 싶습니다 타임 라인의 진행 상황에 대해 생각해 봅시다 이 경우와 같이 보입니다

글쎄, 그것은 매우 간단합니다 이 예에서는 화면에 첫 번째 광고는 프리 롤 광고입니다 아니면 더 복잡 할 수도 있습니다 이 경우 프리 롤 광고가 있습니다 미드 롤 광고 및 포스트 롤 광고에 게재됩니다

그리고 그들은 일종의 내용을 나누었습니다 그래서 언뜻 생각하면 이것은 ConcatenatingMediaSource를 사용할 수있는 곳입니다 하지만 불행히도 일반적으로 광고를로드 할 때, 특정 광고 URI에 실제로 커밋 할 수는 없습니다 때까지 당신이 그것을 재생하려고합니다 Google에서 정확히 어떤 광고가 있는지는 알 수 없습니다

우리는 선전 할 것입니다 그럼 우리가 시도하면 어떻게되는지 보자 기존 MediaSources에서 단 한 명의 플레이어 만 사용하는 방법 이러한 광고를 재생합니다 그래서 재생 시작 부분에 URI가 있습니다 첫 번째 광고를 게재 한 다음 재생할 수 있습니다

그러나 우리는 우리가 그 내용을 재생할 필요가 있음을 안다 그래서 플레이어는 실제로 버퍼링하려고합니다 우리가 대신 콘텐츠를 재생하고 싶다고 말하면됩니다 그런 다음 콘텐츠가 재생되고 사용자가 다시 버퍼링을 볼 것입니다 그런 다음 광고, 더 많은 버퍼링 및 이것이 어떻게 작동 할 것인지 말하고있는 것 같습니다

버퍼링이 많이 있습니다 그리고 이것은 좋은 사용자 경험이 아닙니다 사람들이이 문제를 해결하기 위해 노력하는 한 가지 방법 그들은 두 명의 플레이어를 사용하려고 시도 할 것입니다 그리고 그 아이디어는 한 선수가 현재 화면에있는 것을 재생하려고합니다 다른 플레이어는 백그라운드에서 버퍼링을합니다

다음에 올거야 따라서 광고 URI가 도착하자마자 배경 플레이어를 채울 수 있습니다 잘하면 일부 데이터를 버퍼링 할 수 있습니다 재생이 시작되기 전에 그리고이 경우 재생은 광고와 콘텐츠 사이를 전환하십시오

그러나이 솔루션에는 단점도 있습니다 이 두 플레이어는 모두 버퍼링을 위해 메모리를 사용합니다 동시에 코덱을 사용할 수도 있습니다 그렇게 좋지는 않습니다 그리고 이것은 또한 매우 어렵습니다

당신이 이것을 시도한 적이 있다면 올바르게 구현할 수 있습니다 그래서 우리는 MediaSource를 구현하려고 생각했습니다 특별히 광고용으로 설계되었습니다 그리고이 MediaSource가 구현되었습니다 연결 미디어 소스와 약간 비슷한 방식으로, 단,이 재생 목록 항목은 다음과 같습니다

채워지지 않습니다 그리고 그것들은 물음표로 표시됩니다 그것들은 광고들로 채워질 것입니다 그들이 도착하자마자 그럼 재생이 어떻게 보이는지 봅시다

이 가설적인 MediaSource와 같습니다 재생이 시작되고 첫 번째 광고가 표시됩니다 그런 다음 콘텐츠가 재생됩니다 바라건대 우리는 조금 더 일찍 다음 광고를 얻습니다 그 자리 표시자는 타임 라인에 채워집니다

그리고 이것이 잘 작동하면 사용자 실제로 재생하는 동안 어떤 버퍼링도 보지 않을 것입니다 그래서 이것의 실질적인 예로서, Google은 InteractiveMediaAds SDK를 제공합니다 너는 그것을 들었을지도 모른다 그리고 우리는이 ImaAdsMediaSource에서 광고를로드하는 데 이것을 사용하고 있습니다 보시다시피, 지역 종류의 광고가 IMA에서로드 될 때 강조 표시됩니다

그리고 미디어 소스가 IMA를 래핑하고 있습니다 그래서 플레이어는 게임의 세부 사항에 대해 걱정할 필요가 없습니다 광고가 실제로로드됩니다 이 타임 라인에서 원활한 전환 효과를 얻을 수 있습니다 콘텐츠와 광고 사이

그래서 우리는 이것을 실제로 개발 브랜치로 밀어 넣었습니다 오늘 미리 미리보기를 원한다면 콘텐츠에 광고를 삽입하려는 경우 사용하기가 매우 쉽습니다 그래서 당신은 당신의 콘텐츠를 가져 간다 MediaSource 당신은 그것을 구조에 전달합니다 ImaAdsMediaSource를 정의하는 adTagUri와 함께 로드 할 광고 재생 목록 또한 OverlayViewGroup을 사용합니다

어떤 양방향 미디어 광고가 사용할 것인가 플레이어 상단에 광고 사용자 인터페이스를 표시하는 방법 예를 들어 건너 뛰기 버튼처럼 이 일을 시도하면 얻을 수있는 것이 있습니다 프리 롤 광고가 재생중인 것을 볼 수 있습니다 광고가 끝나면 광고 간 전환이 아주 원활하다 콘텐츠로 또한 재생 컨트롤에 지원 기능이 있음을 알 수 있습니다

광고 마커가 거의 표시되지 않도록 사용자가 미드 롤 광고의 위치를 ​​확인하십시오 그리고이 재생 중에 일관된 버퍼링 정책이 항상 적용됩니다 이제 우리의 미래 계획에 대해 이야기하기 위해 다시 Ollie로 돌아 가자 올리버 우먼 : 우리가 너를 떠나기 전에, 나는 방향에 대해 조금 말하고 싶다 ExoPlayer가 향합니다

이것에주의를 기울이는 것만으로도 이것은 약속이 될 수 없습니다 우리는 어떤 것에도 타임 라인을 넣지 않을 것입니다 그러나 사물의 측면에서 우리가 앞으로 6 개월 동안보고있을 것입니다 1 년, 우리는 계속 될 것입니다 나머지 기능 틈을 채우기 위해 우리가 정말로 완전 해지는 관점에서 미디어 재생 라이브러리

우리가 아는 하나의 구체적인 것은 당신을 많이 일으키는 것입니다 문제는 오프라인에 대한 적절한 지원입니다 그래서 이것이 실제로 다운로드하는 곳입니다 미디어를 나중에 재생할 수 있습니다 그래서 우리는 우리가 시작하기를 기대할 수 있습니다

향후 6 개월 동안 오프라인 지원 구축 ~ 1 년 우리는 또한 계속 일할 것입니다 향상된 성능 그리고 그것은 디코더 인스턴스를 유지하는 것과 같은 것을 의미합니다 한 재생에서 다음 재생으로 플랫폼에서, 해제 및 인스턴스화 우리가 지금하는 것처럼 그 디코더는 꽤 비쌀 수 있습니다

살펴볼 성능의 또 다른 측면 DASH 및 HLS를위한 향상된 적응 형 트랙 선택입니다 SmoothStreaming 적응 형 재생 및 고급 버퍼링 정책 따라서 현재 우리가 사용하는 기본 구성 요소 이러한 작업을 수행하기 위해 제공, 그들은 꽤 효과적이지만 그들은 그들이 구현하는 정책면에서 아주 간단합니다 그래서 우리는 좀 더 깊이 잠수하기를 정말로 원합니다 적절한 연구와 종류를하고 더 나은 성능을 내기 위해 이들을 미세 조정하는 방법 상자의 마지막으로 우리는 ExoPlayer API가 매우 큰 것을 알고 있습니다

시작하기에 어려울 수 있음을 다이빙이 필요한 곳을 정확히 알아 내기 위해 뭔가를 사용자 정의하고 싶습니다 그래서 우리는 더 나은 문서화 작업을 할 것입니다 아마도 문서화로 시작한다 플레이어가 가지고있는 내부 구성 요소의 일부 사용했다 ExoPlayer로 다음에 할 수있는 일의 관점에서 네가 여기있는 동안, 내일 근무할 시간이있어

아침 9시 30 분에 근무 시간대에 우리에게 질문이 있으시면 함께 오세요 우리는 채팅하고 답변을하는 것보다 더 행복 할 것입니다 우리 소스 코드를 살펴보고 싶다면, GitHub 저장소는 공개되어 있으므로 가서 살펴볼 수 있습니다 그리고 우리는 또한 홈 페이지를 가지고 있습니다

시작하는 데 도움이되는 개발자 가이드가 포함되어 있습니다 또한 다양한 문서가 있습니다 지원되는 형식 등 그리고 그걸로와 주셔서 감사합니다 불행히도 지금은 질문 할 시간이 없습니다

그러나 우리는 아마 이후에 모퉁이에서 내려갈 것입니다 내가 말했듯이, 질문이 있으면 우리가 지금 대답 할 수없는, 제발 내일 아침에 너와 같이 갈거야 그들에게 행복하게 대답하십시오 시간 내 주셔서 대단히 감사합니다 [박수 갈채] [음악 재생]

How to Get Dark Mode on Google Chrome for Android

특히 밤에 Chrome 검색을 사용하는 경우 너는 그 소식을 읽었고, Stories 귀하의 Google 크롬에 다음 귀하의 Google 크롬에 다크 모드가 필요합니다 다크 모드는 탐색이 쉽고 눈이 안전하기 때문에 이제 Google 크롬에서 어두운 모드 기능을 원한다면 계속 조정 해보십시오

비디오가 끝날 때까지 지켜보십시오 따라서 내 YT 채널에 아직 가입하지 않은 경우 동영상을 시작하기 전에 이 빨간 SUBSCRIBE 버튼을 누르고 내 채널을 구독하십시오 도와주세요! 그래서 프로세스는 매우 간단합니다 먼저 시작합니다 구글 크롬

먼저 간체 페이지를 활성화해야합니다 야간 모드 기능을 사용할 수 있습니다 그럼 어떻게 할 수 있죠, 세 개의 도트 아이콘을 치고, 설정> Accesbility 설정에서 히트> 단순화 된 페이지보기 옵션을 설정하십시오 간체보기에서 Chrome은 기본적으로 기사를 제공합니다 읽기 모드

그것은 모든 멋진 탭을 제거합니다 다음과 같이 웹 사이트를 더 깨끗하게 볼 수 있습니다 그 후에 Google 크롬 플래그 옵션을 열고> 이제 리더 모드 트리거링 옵션을 검색합니다 그것을 가능하게하십시오

이 다섯 가지 옵션 중에서 선택할 수 있습니다 하지만 현재, 여기에서는 항상 옵션을 선택합니다 Google 크롬을 다시 시작합니다 이제 어떤 웹 페이지라도 열어보십시오> 이제 페이지를 열 때마다 읽기 모드로 변경할 수있는 팝업 창이 나타납니다

읽기 모드로 변경할 수있는 팝업 창이 나타납니다 어두운 모드로 전환하려면 가볍게 누르십시오 이제 3 도트 아이콘> Appearnce> 이제 여기에 어두운 모드가 선택됩니다

What Is Google's New Kotlin First Initiative for Android App Development?

그래서 Google은 최근에 Kotlin은 Android 앱 개발에 관해서 처음입니다 그렇다면 코 틀린은 무엇을 의미합니까? 그러나 더 중요한 것은 아마, 이것이 개발자로서 당신에게 어떤 영향을 미칩니 까? 오늘의 비디오에서 그것에 대해 이야기합시다

이 비디오는 Learn Programming Academy의 Android Kotlin Masterclass입니다 지저분한 48 시간의 훈련으로, 이 코스는 단지 보여주지 않습니다 Android 애플리케이션 작성 방법, 모든 것을 자세히 설명합니다 Kotlin 언어 자습서도 포함됩니다 방대한 할인과 즉각적인 액세스를 확보하십시오

lpadev / youtubeAndroid를 방문하여 또는이 비디오의 설명에있는 링크를 클릭하십시오 (테크노 음악) 다시 환영합니다, 제 이름은 팀 부칼 카입니다 그날의 또 다른 프로그래밍 팁과 함께 그리고 우리는이 Kotlin First initiative에 대해 이야기하고 있습니다

Google이 지금 이야기하고있는 Android 앱 개발을 권장합니다 그래서 약간의 맥락을주는 것, 첫째, Google 및 Jetbrains Jetbrains는 실제로 만든 회사입니다 처음에는 코 틀린 언어였습니다 그들은 이제 재단을 형성했습니다 코 틀린 재단과 그 재단의 목적 어 보호, 승진 및 진급이다

Kotlin 프로그래밍 언어 그래서 저는 그것이 그 의도에 대한 큰 단서라고 생각합니다 Google 및 Jetbrains의 이제 코 틀린 자체가 오픈 소스 언어입니다 GitHub에서 개발되고 있습니다 이제는 환상적입니다 언어에 기여할 수있다

그래서 다른 많은 프로그래밍 언어와는 다릅니다 이들은 폐쇄 된 출처이다 총 추가 기능을 할 수 없다는 것을 의미합니다 독학 그래도 기초 중의 하나, 가장 큰 업무는 새로운 기능을 보장하는 것입니다

개발자가 만들고 기여한 실제로 Kotlin의 전반적인 설계 목표를 깨뜨리지 마십시오 다른 말로하면, 그 과정을 주도하는 누군가가 있습니다 그것은 좋은 점이다 코 틀린이 올바른 방향으로 나아 간다 이제는 Kotlin의 큰 장점 중 하나가 라이센스 문제가 없다는 것입니다

존재하는 잠재적 라이센싱 문제와는 달리 Android 플랫폼에서 Java를 사용하여 지금 당장은 문제가 없습니다 하지만 당신은 오라클, Java와 Google의 제작자 Google의 사용에 대해 여러 번 법정에 출두했다 Android 플랫폼의 Java 그래서 기본적으로 당신은 관련된 모든 문제를 해결하고 있습니다 네가 코 틀린으로 이사 간다면 최근 Google I / 0 컨퍼런스에서, 그래서이 비디오를 녹음 할 때가 이번 달이었습니다

2019 년 5 월, Google은 개발자 통계 누가 안드로이드 스튜디오 제품을 사용하고 있는지, 현재이 개발자의 50 %는이 안드로이드 개발자이며, 이미 Kotlin을 사용하고 있습니다 다시 한번 그것은 큰 것입니다 코 틀린은 2 년 전만 공개한다고 말할 수 있습니다 이미 50 %를 치고있다 그리고 그것은 내 생각에 기본적으로 꽤 중요합니다

여기에서 올라가고 올라갈 것입니다 지금 그들은 또한 언급했다, 나는 발견했다 그것은 꽤 흥미 있었다 코 틀린 그 자체가 GitHub에서 가장 빠르게 성장하는 언어입니다 이제 2 가지 큰 이유가 있습니다 왜 내가 Kotlin을 사용하는 것 같아요

이제 다시 Kotlin으로 돌아 가야합니다 나는 비디오의 시작 부분에서 언급했다 그럼 그게 실제로 무엇을 의미합니까? 그리고 같은 컨퍼런스에서 Google I / O 컨퍼런스, 구글은 안드로이드가 Kotlin First라고 발표했다 이제는 Google이 실제로 더 많은 것을 만들고 있습니다 네가 원한다면, Kotlin 개발자가 먼저 사용할 수 있습니다

다른 언어보다 먼저 그리고 그것은 분명히 지난 몇 년 동안의 출발이었습니다 이사회가 새로운 API를 도입 한 경우 또는 일부 새로운 기능을 사용하면 일반적으로 사용할 수 있습니다 Java 개발자가 먼저 이제 그들은 그것을 바꾸고 있습니다 실제로 사용할 수있게 만들고 있습니다

먼저 Kotlin 개발자를위한 것입니다 그리고 그들이 사용했던 예가있었습니다 Jetpacks API가 출시 중입니다 먼저 Kotlin 개발자를위한 것입니다 꽤 큰 성명이 거기에 있습니다

다시 말하지만, 이것은 언급 한 바와 같이 커다란 변화였습니다 이전에 그들이 승진하고 어 자바를 먼저 공개했다 구글도 강력한 추천을했다 같은 회의에서 새로운 안드로이드 프로젝트, 처음부터 새로운 프로젝트 시작, 항상 Kotlin에서 해보기를 권합니다 또 다시 지난 해와 출발합니다

지금 이유 중 하나, 그래서 당신이 할 수있는 3 가지 좋은 이유는 무엇입니까? 고려 Kotlin, 유형을 적게, 테스트를 덜, 그리고 유지 보수가 적습니다 이제 그걸 추가하면 이미 프로 개발자의 50 % 그들의 통계에 따르면 이미 Kotlin을 사용하고 있으며, 시간이 지금 여기에 있다고 생각합니다 기본적으로 당신을 위해 Kotlin을 채택하기 시작합니다 Adroid 앱 개발 기본적으로 내가 말하는 것은, 내 관점에서 내 의견으로는, 당신은 실제로 Koltlin에서 발전해야합니다

언제든지 Androd 앱을 실제로 개발하고 있습니다 앞으로 나아가 다 하지만 어쨌든 흥미로운 질문을 불러 일으킨다 앱을 코딩하는 사람들에게 일어날 일 자바로? 자바의 안드로이드 애플 리케이션은 지금? 음, 좋은 소식은 Google이 그들이 계속해서 지원할 것이라고 Java 플랫폼에 투자하십시오 그래서 그것은 마치 어, 자바로 작성한 모든 코드, Android 앱을 사용하는 경우 낭비됩니다

얼굴을 보자 년과 년 그리고 우리의 프로그래밍 코드 그건 자바에서, 어, 안드로이드 애플 리케이션에서 발표되었습니다 그래서 그것은 어쩌면 미친 것 같아요 내 생각에 Google은 그걸 없애 버려 갑자기 그걸 양립 할 수 없게 만든다

그래서 제가 말하고자하는 것은 모든 코드입니다 당신이 자바로 작성한 Android 앱 플랫폼의 경우 여전히 1 번으로 일할 것입니다 하지만 두 번째로 지원 될 것입니다 Google과 함께 전진하고 있습니다 그리고 기본적으로 C ++과 Java를 사용할 수도 있습니다

언제든지 그들이 원하는 것을 말합니다 기본적으로 Android 앱입니다 어느 쪽이 꽤 좋다, 하지만 그들의 추천은 코 틀린 자체에 집중하는 것입니다 기본적으로, 당신은 여전히 ​​지원을받을 것입니다 모든 프로그래밍 언어를 지원합니다

결론은 콜린 퍼스트가 먼저 계획이므로 언제든지 새로운 프로젝트를 만들 수 있습니다 내 추천과 나는 이것을 앞으로 나아갈 것이다 첫 번째 접근 방식으로 Kotlin을 사용할 것입니다 그게 내가 제일 먼저 할 일이야 기본적으로 Kotlin에서 코딩을 살펴 봅니다

그러나 레거시 애플리케이션은 계속해서 지원 될 것입니다 원할 경우 Java를 사용할 수 있습니다 지금 비록 당신이 이미 가지고 있지 않다면, Google I / O 회의 비디오를 확인하십시오 YouTube에서 사용할 수 있습니다 구글 개발자 채널, 나는 말해야한다

거기에 재생 목록이 있습니다 Google I / O 회의 그리고 거기에 약 178 개의 비디오가 있다고 생각합니다 다양한 분야에서 볼 수있는 환상적인 동영상 Android 앱 개발 내에서 해당 채널을 구독하는 것이 좋습니다 그리고 그걸 확인해 봐 기본적으로 링크가 있습니다

그 재생 목록에 대한 설명에서, Google I / O 개발자 컨퍼런스의 재생 목록에 추가 그러니 체크해보세요 특히 당신에게 먼저 관심을 가질만한 것, 나는 몇 가지 점을 인용했다 어, Google 개발자 재생 목록입니다 어 기조 연설, 30 분 ~ 45 분 정도입니다 그래서 기조 연설, 개발자 기조 연설, 일어난 일에 대한 더 많은 정보가 필요합니다

하지만 나에게 이것은 아주 크다 안드로이드는 현재 Kotlin을 밀고있다 너 정말보고 있어야한다고 생각해 Kotlin에서 최대한 빨리 숙련 된 기술을 습득해야한다 안드로이드 애플 리케이션 개발을 위해 앞으로 나아 갔다

좋아, 그래서 그걸 도왔 으면 좋겠어 질문이 있으시면 언제든지 댓글을 남길 수 있습니다 내가 너에게 돌아갈거야 다음 팁을 살펴볼 준비가되면, 여기를 클릭하면 확인하실 수 있습니다 특정 프로그래밍 비디오 코딩에 관심이 있다면, 왼쪽 하단에있는 링크를 클릭하십시오

여기를 클릭하여 가입을 고려하십시오 나는 너를 곧 볼거야!

New Era For Android | Kotlin Programming Language

반가워요, 얘들 아! 이쪽은 Neil Holkar입니다 당신이 안드로이드 개발자이거나 하나가 되려한다면, 이것이 올바른 것이어야합니다

기어를 "Kotlin"이라는 새로운 프로그래밍 언어로 전환 할 시간입니다 아니면 Android에서 공식 언어를 말해야합니다 네! 내 말을 들었다 Google은 2017 년 11 월 28 일에이를 공식화했습니다 이제이 새로운 프로그래밍 언어에 대해 잠깐 살펴 보겠습니다

Kotlin은 JetBrains에서 설계되었습니다 아파치 20에 기반한 오픈 소스 프로젝트이다 이제 Android에서 새로운 프로그래밍 언어가 필요한 이유는 무엇입니까? Java로 문제가 해결되지 않았습니까? 예, 얘들 아 오랜 시간 동안 우리는 앱 개발을 위해 Java SE 7을 사용했습니다

우리는 표현력이 풍부하고 훨씬 안전하며 안드로이드 앱을 만드는 언어가 필요했습니다 건강하고 활동적인 그래서 우리는 코 틀린을 개발했습니다 코 틀린은 표현력이 있습니다 코 틀린은 간결합니다

Kotlin은 강력합니다 하지만 무엇보다도, 그것은 기존의 안드로이드 언어 및 런타임과 상호 운용이 가능합니다 이제 kotlin에서 고전적인 hello world 예제를 보겠습니다 첫 번째 행은 패키지를 선언합니다 fun는 함수를 선언하는 키워드입니다

이제 알 수 있듯이 kotlin 프로그램의 시작점은 main이라는 함수이기도합니다 C / C ++ 및 Java와 매우 유사합니다 main 함수의 인수는 제네릭 형식 String의 배열입니다 여기에서 주목할 수있는 한 가지는 데이터 유형이 변수 이름 뒤에오고 둘 다 콜론으로 구분됩니다 여기서 주목해야 할 또 하나의 점은 세미콜론 문장 종결자가 또한 kotlin에서 선택 사항

이제 코드 스 니펫을보고 kotlin이 안전한지 확인하십시오 위의 코드는 컴파일 오류를 생성합니다 Kotlin은 출력 변수를 null로 제한합니다 먼저 변수를 nullable로 선언해야합니다 예를 들면 다음과 같습니다

이 코드는 완벽하게 실행됩니다 Kotlin에는 Java에서 POJO 클래스가 있고 확장 할 수있는 많은 기능이 있습니다 그 기능을 사용하려면 Getter / Setter / toString () / equals ()에 대한 코드를 포함해야합니다 그러나 kotlin에서 데이터 클래스를 사용하면 Getter / Setter / toString () / equals ()를 사용하여 POJO 클래스를 만들 수 있습니다 코드 한 줄만 있으면됩니다

예를 들어이 코드 Lambda를 사용하여 kotlin의 코드를 단순화 할 수 있습니다 이제 클래스를 상속하지 않고 확장을 통해 기능을 확장 할 수 있습니다 kotlin의 기능 하지만 kotlin의 가장 큰 특징은 자바와 100 % 상호 운용이 가능하다는 것입니다

즉 Java에서 kotlin 코드를 호출 할 수 있으며 그 반대도 마찬가지입니다 지금까지 우리는 kotlin의 구문, 의미 및 특징에 대해 이야기했습니다 이제 다양한 기존 도구에 대한 지원에 대해 말씀 드리겠습니다 IntelliJ IDEA 15에는 Kotlin에 대한 플러그인 지원이 있습니다 또한 Eclipse IDE에는 Kotlin에 대한 플러그인 지원이 있습니다

Android 30 이상부터 kotlin은 공식적인 지원을받을 것입니다 이전 버전의 Android의 경우 플러그인 지원도 가능합니다 이제 우리가 코 틀린으로 전환하는 회사에 대해 이야기하면, 당신은 그 (것)들에 의하여 kotlin의 거대한 채용을 볼 수있다 Amazon Web Services에서 Pinterest, Coursera, Netflix, Uber, Corda 및 BaseCamp Expedia에 HSBC는 이미 kotlin을 채택했습니다

kotlin으로 빌드 된 다양한 앱을 볼 수도 있습니다 좋아하는 앱도있을 수 있습니다 코 틀린은 이미 시장에 나와있다 이제는 어떤 변화가 가져올 것인지, 그리고 어떤 새로운 변화가이 분야에서 이루어질 것인지 봅시다 2018 년 프로그래밍 언어

이 동영상 용입니다 아래의 코멘트 섹션에서 Kotlin에 대한 의견은 무엇입니까? 2018 년에 자바를 대체 할 예정입니까 ?? 그리고이 비디오가 마음에 들면 LIKE 버튼을 누르고 SUBSCRIBE를 잊지 마세요 이 채널에 그때까지, 계속 학습하고, 프로그래밍을 유지하십시오! 고마워, 안녕!

Quick Walkthrough of a Google Compute Engine API Sample for Android

PAUL RASHIDI : 안녕하세요 저는 Paul Rashidi, 개발자 프로그램 엔지니어입니다

Google Cloud Platform에서 저는 Compute Engine과 모바일 앱에 대해 매우 열정적입니다 너무 오래 전, 나는 일을 시작했다 둘 다 사용하는 일부 응용 프로그램에서는 거기에 다른 개발자가 있다는 것을 알고 있습니다 비슷한 일을하고 싶기 때문에 최근에 소스를 오픈했습니다 샘플 앱

앱 데모를 보여 드리겠습니다 그런 다음 건물을 짓는 과정에 대해 간단히 이야기하십시오 Android Studio에서 GitHub의 샘플 앱에 포함 된 readme 파일 직접 앱을 배포하는 방법을 설명합니다 그래서 당신은 자신의 안드로이드 장치에서 실행되도록 할 수 있습니다 먼저 데모

응용 프로그램은 CE API Java를 사용하는 간단한 응용 프로그램입니다 클라이언트 라이브러리를 사용하여 프로젝트 자원 정보를 검색하십시오 모든 활성 리소스에 대한 정보를 가져옵니다 이전에 등록한 개발자 프로젝트에서 가져 왔습니다 보시다시피 로그인 페이지부터 시작합니다

여기서 Google 계정을 선택할 수 있습니다 샘플 계정을 선택하겠습니다 이 계정 목록은 Google 계정에서 가져옵니다 Android 기기에 등록 된 경우, 사용자가 비밀번호를 다시 입력하지 않아도됩니다 이제 코드를 완성했습니다

코드는 Android에 OAuth를 요청합니다 해당 계정의 20 토큰 (Compute의 OAuth 20 범위 포함) 엔진 및 클라우드 스토리지 나는이 프롬프트를 받아 들일 것이고, 이제는 OAuth 2

0 액세스 토큰을 검색 할 수 있습니다 OAuth 20 액세스 토큰을 상기시켜드립니다 시간 제한된 권한 부여 문자열입니다 Compute Engine에 대한 액세스를 제공하는 사용자를 대신하여 클라우드 스토리지 API를 제공합니다

다음으로 개발자 프로젝트의 프로젝트 ID를 입력합니다 Google 계정에 대한 액세스 권한이 있습니다 이것은 분명히 이미 프로젝트가되어야합니다 CE를 사용하거나 적어도 API가 활성화되어 있어야합니다 이 값은 프로젝트 이름 문자열 또는 우리가 콘솔에서받는 프로젝트 번호

이 리소스보기 버튼을 클릭합니다 새로운 활동이 호출됩니다 이 응용 프로그램은 백그라운드에서 CE API와 대화합니다 자원 정보를로드합니다 우리는 몇 개의 인스턴스와 디스크가 있음을 알 수 있습니다

우리 프로젝트가 접근 할 수있는 구역으로 이 인스턴스가 예정된 정전이 있습니다 이것은 실제로 이전에 삭제하려는 인스턴스입니다 그래서 우리는 이것을 조사하고 삭제할 것입니다 다시, 앱은 CE API와 비동기 적으로 삭제를 수행합니다 아주 간단한 앱

이 앱에서는 Android 마스터 세부 정보를 사용하기로 결정했습니다 견본 따라서 태블릿에서 앱을 실행하는 경우, 첫 번째와 두 번째 활동을 멋지게 결합한 것을 알 수 있습니다 함께 이것은 직장에서 안드로이드 조각이지만, 이것에 대한 자세한 내용 후에

이제 코드를 살펴 보겠습니다 코드를 살펴보기 위해 그것을 검색해야 할 것입니다 그렇게 쉬운 일입니다 우리는 Git을 사용하여 소스 코드를 체크 아웃 할 것이다 가져 오기 옵션을 통해 프로젝트를 가져옵니다

Android Studio에서 우리는 최고 수준의 프로젝트를 선택하고, Gradle 래퍼 옵션을 사용하고 가져옵니다 여기에서 문제가 발생하면 readme를 참조하십시오 보다 포괄적 인 지침을 보려면 코드 저장소를 참조하십시오 이제 코드가 생겨서 우리에게 가장 쉬운 방법입니다 이 프로젝트를 이해하는 것은 코드를 보는 것입니다

그것이 헌신 된대로 첫 번째 커밋을 볼 수 있습니다 프로젝트 마법사가 생성 한 코드이며 주로 Git 무시 항목을 정의합니다 구조는 Eclipse 환경과 조금 다릅니다 보시다시피, 우리는 build 디렉토리를 제외하고 있습니다

아이디어와 Gradle 숨겨진 디렉토리 이 모든 파일은 주 파일에서 유추되어야합니다 Gradle 파일을 작성하십시오 따라서 체크인 할 필요가 없습니다 우리는 또한 lib 디렉토리를 제외합니다

Maven을 통해 의존성을 끌어 들이기 때문에 vis a vis Gradle 조금 나중에 Gradle에 대해 자세히 설명합니다 프로젝트 마법사 커밋의 경우 모든 기본값을 사용했습니다 단 최소한의 SDK 11을 선택했다 그래서 나는 안드로이드 조각을 사용할 수있게했다

이것은 내가 마스터 세부 사항을 사용할 수있게했다 샘플 내 애플 리케이션의 기초로 버전 11을 선택하지 않아도됩니다 자신의 앱을 만들고 파편을 원하지 않습니다 하지만 나는 타블렛의 단순함을 좋아한다

우리가 이전에 본 인터페이스 다음 커밋은 두더지입니다 API 상호 작용 코드가 추가되었습니다 프로젝트에 CE API를 사용하는 모든 코드는 여기에 있습니다

우리는 사용자 인터페이스에서 네트워크 호출을 유지할 필요가 있기 때문에 실 기본적으로 API 스텁을 인스턴스화하는 것을 볼 수 있습니다 명령을 작성한 다음 명령을 실행하십시오 삭제 명령의 경우, 우리는 추가 상태 호출을하려고합니다 완료 될 때까지 기다리십시오

이 커밋에서 나는 또한 덧붙였다 로그인 활동 이는 샘플 로그인 활동입니다 Android 스튜디오에서 마우스 오른쪽 버튼을 클릭하여 만들 수 있습니다 이런 식으로

마지막으로 중요한 변경 사항을 알 수 있습니다 이 커밋의 buildgradle 파일에 있습니다 Gradle에 익숙하지 않은 경우, 그러면 당신은 아마 사실을 잊어 버릴 수 있습니다 빌드를 정의하는 새로운 방법입니다

이 스 니펫은 특히 모든 종속성을 정의함으로써 Maven 의존성으로 Android Jars 용 Google 클라이언트 라이브러리, Compute의 표면 확장뿐만 아니라, 이 라인 때문에 프로젝트에 추가됩니다 스 니펫은 Maven을 사용하지만 여전히 SDK 관리자를 통해 라이브러리를 다운로드해야합니다 스 니펫의 주석을 읽으십시오 특정 패키지에 대해서는 완전히 업데이트해야합니다

다음 커밋은 로그인 활동을 구현하도록합니다 Google 계정 자격증 명을 사용합니다 Android 인식 자격 증명입니다 기기에서 Google 계정을 다시 사용합니다 애플리케이션에 OAuth 2

0 토큰 액세스를 허용합니다 마지막으로 흥미로운 커밋 자원 목록의 구현이다 이전에 체크인 한 비동기 작업에 연결합니다 이 커밋에서 우리는 XML 레이아웃을 조정했다 파일을 사용하여 리소스를 표시하고 목록 및 세부 정보를 업데이트했습니다

조각을 사용하여 인스턴스, 디스크 및 영역을 표시합니다 그것이 코드에 관한 것입니다 정말 일부 응용 프로그램을 보길 고대하고 있습니다 Compute Engine API를 사용하는 휴대 기기에서 시간 내 주셔서 감사 드리며 GitHub에서 우리 프로젝트에 별표를 던지거나 동영상이 유용했음을 나타냅니다 고맙습니다

Java or Kotlin for Android Development – Which One Is Better?

Kotlin 또는 Java for Android에 중점을 두어야합니까? 앱 개발? 오늘의 비디오에서 그것에 대해 이야기합시다 환영합니다, 제 이름은 팀 부칼 카입니다

그날의 또 다른 프로그래밍 팁과 함께 문제는 어떤 프로그래밍 언어 Android 앱 개발에 집중해야합니까? 장면에 상대적으로 새로운 Kotlin은, 또는 주위에 있었던 오래된 언어 인 자바 많은 수년간 일반적으로, 나의 조언은 새로운 프로젝트를위한 것이다 Kotlin에 집중할 수 있습니다 그 이유는 그것이 선진국 언어 다

특히 지난 2 년 동안, Google은 Kotlin을 크게 홍보했습니다 Android 앱 프로그래밍의 대안으로 저에게는 몇 가지 이유가 있다고 생각합니다 구글이 공식적으로 말하지는 않았지만, 나는 그들이 오라클과 논쟁 중이라고 생각한다 Java의 사용에 관해서는 무게가 나가고 있습니다 그들의 마음에 그들은 스스로를 해방하려합니다

아마 그 라이센스 제한에서 계속되는 주장과 법원 사건이 많이 있기 때문에 실제로 오라클과 Google과 관련된 안드로이드 애플 리케이션 개발에 자바의 사용 장기적으로 볼 때 우리는 우리가 보았던 Kotlin과 Java와 유사한 상황 신속하고 객관적인 C와 iOS 개발, 그리고 그것은 애플, 그들은 수년간 목표 C를 사용하고 전환했다 신속하게 신속하게 이제는 내가 말할 것입니다 그 목표 C, 아직 사용 중이지만 레거시 애플리케이션의 경우, 즉, 이전에 개발 된 응용 프로그램 스위프트가 나오면, 확실히 프로그래밍 프로젝트의 대다수는 생각합니다 이제 나와서 Swift에서 일하거나 실제로 만들었습니다

그래서 나는 구글과 같은 일이 일어날 것이라고 생각한다 이미 통계적으로, 마지막 Google IO에서 Google 슬라이드를 본 것 같습니다 콜틴이 이미 시작한 것에 대해 이야기했던 6 월에 새로운 프로젝트를 위해 Java를 추월하려면, 그게 일어날 것 같아 너라면 네가 그렇게 생각해 기존 자바 개발자, 지금은 Kotlin을 배우기에 좋은 시간이 될 것입니다

그러니 자신을 세워서 그 기술을 얻었습니까? 그래서 Kotlin이 실제로 주류가 될 때 대부분의 새 프로젝트는 Kotlin, 너는 적어도 Kotlin에 대한 기본적인 지식을 가지고있다 생산적 일 수있다 처음으로 시작하는 경우 자바 또는 코 틀린으로 프로그래밍하지 않은 경우, 내 추천은 Kotlin에서 시작하는 것입니다 그리고 그것은 새로운 섹시한 언어이기 때문입니다 그것은 당신의 이력서에 아주 좋게 보일 것입니다

그러나 나는 또한 여전히, 내가 네 신발에 있었다면, 자바 학습에 시간을 투자해라 자바가 그렇게 큰 언어이기 때문에, 그런 인기있는 언어, 심지어 다시 Android 앱 개발과 관련 있습니다 Java로 작성된 기존 프로젝트가 너무 많습니다 그래서 다른 말로하면 당신은 Java 귀하의 일상적인 프로젝트 작업에서 어쨌든, 아마 레거시 애플리케이션을위한 것이어야합니다 새로운 응용 프로그램의 일부 작성, 또는 Kotlin에서 응용 프로그램의 일부 아마도 당신은 자바 컴포넌트로도 작업하고있을 것입니다

그래서 당신은 정말로 두 가지 모두를 알아야합니다 하지만 Android 앱 개발자로 시작한 경우 2019 년에 나는 Kotlin에 먼저 초점을 맞추었고, 그러나 나는 또한 내가 몇 가지 자바 기술을 가지고 있는지 확인하게 될 것이다 기본적으로 더 생산적인 프로그래머가 될 수 있습니다 게다가 좋아, 내가 그걸 도왔 으면 좋겠어

질문이 있으시면 언제든지 댓글을 남길 수 있습니다 내가 너에게 돌아갈거야 다음 팁을 살펴볼 준비가되면, 여기를 클릭하면 확인하실 수 있습니다 특정 프로그래밍 비디오 코딩에 관심이 있다면, 왼쪽 하단에있는 링크를 클릭하십시오 여기 링크를 클릭하여 구독하는 방법을 고려해보십시오

나는 너를 곧 볼거야

Fraction Calculator Plus for Android – Demo and Review

안녕하세요, 오늘 모두들 제가 검토 할 것입니다 분수 계산기 플러스 이것은, 안드로이드에서 이것을하고있어 무료 버전입니다 빼기를 추가하려는 경우 위대한 계산기입니다

분수 나누기 곱하기 때로는 다소 위압적 일 수 있음을 안다 이 계산기를 여러 분수로 나누면 왼쪽에 세 개의 섹션이 있습니다 여기에 오른쪽에있는 정수 섹션은 분자와 분모 섹션을 가지므로 맨 위에있는 분자는 분모에 펀칭 할 때 맨 아래쪽의 분모는 6 인치가 왼쪽면에 펀치를 넣을 것이라고 말합니다 그런 다음 분자가 있습니다 어쩌면 너는, 4 분의 1을 할 것이므로 상단에 1 개, 하단에 4 개를한다

6 분의 1과 4 분의 1을 얻었고 다른 번호에 추가하려면 밑바닥의 추가 부분이 더하기 기호에 부딪혀 11 개에 추가하고 싶다고합시다 열 다섯 열 여섯 번째는 그렇게 말하자 거기에 하단 모서리에있는 equals 버튼을 누르면 18 + 3 16 답변을 얻었습니다 어떻게 궁금해하십니까? 세상에서, 당신은이 작은 체크 마크를 치고 당신에게 줄 것입니다 아래 단계에서 답을 얻으려고하는 모든 단계는 다음과 같이 해결책을 얻었습니다

글쎄, 10 진수로 제공하므로 두 곳 모두 필요하다면 그것은 또한 여러분에게 아주 쉽게 빼기를 할 것입니다 그래서 두 개의 숫자를 빼기를 원합니까? 12 인치 어쩌면 12 및 1/4 – 10 및 3/16 그래서 우리는 거기에 당신이 2와 1 / 16 그 체크 마크를 다시 치면 다시 나타납니다 10 진수 형식으로 모든 단계를 반복합니다 말하자면, 지역을 알아 내고 싶기 때문에 곱셈을해야 할 필요가 있습니다 작은 면적이므로 2와 나에 의하여 1/4 인치는 모른다

세 명과 5/8 예를 들어 조회수가 같고 지역이있는 유형을 입력하십시오 너는 번식 할 수있어 원하는대로 복수 번호를 입력하십시오 당신이 여러개의 분수를 가지고 있다면 이 프로그램은 매우 쉽고, 무료로 사용할 수 있습니다 전 항상 다시 사용하도록 권장합니다

내가 건축을 위해 말했듯이, 당신이 함께 추가하고있는 것들이 여러 개 있습니다 어쩌면 당신은 내가 좋아하는 것을 기억해 주시기를 권합니다 구독 해 주셔서 감사합니다

Android Q beta 2, Cloud Healthcare API beta, & ML Kit for Natural Language Processing

토드 케펠 만 : 안녕 저는 Developer Show의 Todd Kerpelman입니다

가장 멋진 개발자의 주간 업데이트입니다 Google의 뉴스 안드로이드 Q 베타 2 – 헤이, 그 운은 – 지금 갱신 된 SDK 이 릴리스에는 개인 정보 보호 기능이 포함되어 있습니다 테스트 및 피드백, 새로운 방법 거품, foldables 에뮬레이터 등으로 멀티 태스킹을 할 수 있습니다

자세한 내용과 스크린 샷을 보려면, 게시물을 봐 Lustre 오픈 소스 병렬 파일 시스템 많은 양의 데이터에 액세스 할 수 있습니다 매우 빠른 속도와 낮은 대기 시간 그러나 그것을 구성하는 것은 기술적으로 도전적이고 시간 소모적 인 작업입니다 그래서 우리는 배포하기 쉬운 스크립트를 발표했습니다

Lustre 스토리지 클러스터 – 오, 그것도 운율이 – Google Cloud Deployment를 사용하는 Google Compute Engine에서 매니저 시작하려면 게시물로 넘어갑니다 Cloud Healthcare API는 관리 솔루션을 제공합니다 Google 클라우드에서 의료 데이터를 저장하고 액세스하는 방법 플랫폼, 기존 치료 간 중요한 연결 고리 제공 Google Cloud에서 호스팅되는 시스템 및 응용 프로그램 이제 베타 버전으로 제공됩니다 시작하려면 링크가 게시물에 있습니다

최적의 VM 및 메모리 최적화 된 VM 계산 Google Compute Engine에서 사용할 수 있습니다 두 제품 모두 2 세대 Intel Xeon 확장 가능한 프로세서 게시물에 일찍 접속할 수있는 링크가 있습니다 언어 식별 및 스마트 회신 이제 ML Kit에 사용할 수 있습니다 예제 코드와 문서 링크 당신은 그것을 추측했습니다

좋아요, 구독하고 공유하는 것을 잊지 마십시오 Todd Kerpelman이 "개발자 쇼"입니다 보고 주셔서 감사 드리며 다음 주에 다시 보겠습니다 하, 나는 무언가를 얻은 것처럼 미소 지을거야 나는 흥분한다