스트리밍은 대부분의 브라우저와
Developer 앱에서 사용할 수 있습니다.
-
우수한 비디오 재생 경험 만들기
최신 iOS 및 iPadOS 시스템 미디어 플레이어를 사용하여 멋진 미디어 앱을 빌드하는 방법을 알아보세요. 업데이트된 플레이어를 디자인한 과정을 소개하고 나만의 미디어 경험을 디자인하는 데 도움이 되는 모범 사례와 팁을 제공합니다. 또한 비디오의 라이브 텍스트를 살펴보고 삽입 광고 및 재생 속도 제어를 앱에 통합하는 방법을 보여드립니다.
리소스
관련 비디오
WWDC22
-
다운로드
♪ ♪
안녕하세요 저는 Jake입니다 저는 AVKit 팀의 엔지니어이고요 '훌륭한 비디오 재생 경험 창조'에 오신 것을 환영합니다. iOS와 iPadOS 16는 완전히 룩 앤드 필을 가진 전혀 다른 새로운 미디어 플레이어를 구축했으며 콘텐츠에 계속 집중하고 더 넓은 범위의 앱에 적합하도록 설계되었습니다 또한 이 새로운 미디어 플레이어에는 직관적이고 매끄러운 사용을 위해 수많은 참신한 상호 작용 모델을 구축했으니 마음에 들거라 생각합니다 이 세션에서는 새로운 시스템 미디어 플레이어에 대해 자세히 알아보겠습니다 우리는 놀라운 재생 경험을 디자인하는 방법을 배울 것입니다 macOS와 iOS에 새로운 시각적 인텔리전스 기능이 추가될 예정입니다 새로운 미디어 플레이어와 함께 제공되는 완전히 새로운 전면 광고 경험을 소개하고 tvOS에서 가져온 몇 가지 새로운 API를 살펴보겠습니다 마지막으로 AVKit의 새로운 기능인 선택 가능한 재생 속도에 대해 살펴보겠습니다 tvOS 15.0의 경우, 시스템 플레이어를 재설계하여 완전히 새로운 룩 앤드 필을 제공할 뿐만 아니라 시스템 플레이어에 대한 여러 가지 새로운 기능과 사용 편의성을 개선했습니다 여러분의 요청에 따라 iOS 시스템 플레이어도 개선했습니다 우리는 기본 미디어 플레이어를 완전히 재설계하여 tvOS 플레이어의 룩 앤드 필을 채택했지만 터치 우선 장치를 위해 재창조했습니다 우리는 전반적으로 크롬을 제거하여 인터페이스가 더 넓은 범위의 앱 내에서 기본적으로 느껴지도록 하고 플레이어에 보다 현대적인 느낌을 주었습니다 변경 사항 중 일부를 더 자세히 살펴보겠습니다 먼저 재생/일시 중지 및 건너뛰기 컨트롤을 전면 중앙에 가져와 더욱 쉽게 상호 작용할 수 있도록 했습니다 또한 건너뛰기 간격을 15초에서 10초로 조정하여 연속 건너뛰기로 뛰어넘은 거리를 더 쉽게 추적할 수 있습니다 다음으로 타임라인의 유용성도 일부 크게 개선했습니다 타임라인의 현재 위치를 표시하는 슬라이더 노브를 제거합니다 대신 슬라이더를 따라 어디에서나 타임라인과 상호 작용할 수 있습니다 드래그는 더 이상 현재 시간 마커에서 시작할 필요가 없습니다 이렇게 하면 가고 싶은 곳을 더 쉽게 찾을 수 있습니다 또한 비디오 화면비 컨트롤을 좀 더 직관적인 핀치 투 줌 제스처로 교체했습니다 이는 잠시 후에 보여드리겠습니다 물론 새로운 UI는 세로 콘텐츠에도 멋지게 보입니다.
iPadOS에서 플레이어는 키보드, 트랙패드, 마우스, 게임 컨트롤러 등을 완벽하게 지원하여 시스템에 완벽하게 통합됩니다 또한 콘텐츠 탐색과 일부 일반적인 상호 작용을 더욱 쉽고 직관적으로 만들어주고 컨트롤과 상호 작용할 수 있는 여러 가지 새로운 방법을 추가했습니다 이것들을 살펴보죠 먼저 비디오의 채우기 비율을 변경하는 새로운 방법을 추가했습니다 이제 핀치 제스처를 사용하여 확대/축소 수준을 이동할 수 있습니다 핀치 인은 디스플레이의 안전한 영역 내에서 비디오를 가져옵니다 핀치 아웃은 비디오를 확대하여 디스플레이를 완전히 채웁니다 다음으로 가장 일반적인 상호 작용 중 하나인 재생/일시 중지를 간소화했습니다 이제 컨트롤이 숨겨져 있는 동안에도 디스플레이 중앙을 탭하여 비디오를 재생 및 일시 중지할 수 있습니다 마지막으로 미디어 타임라인을 탐색하는 새로운 방법을 추가했습니다 이제 스크롤 보기에서 상호 작용을 사용하여 비디오의 어느 곳에서나 타임라인을 스크롤할 수 있습니다 비디오 프레임을 스크롤하기 시작하면 인터페이스가 사라지고 가장 관련성이 높은 UI만 남아 콘텐츠에 계속 집중할 수 있습니다 또한 tvOS 플레이어에서 몇 가지 새로운 기능이 추가됐습니다 AVPlayerViewController는 이제 전체 화면 UI 내에서 기본적으로 콘텐츠 제목, 자막 및 설명 표시를 지원합니다 AVMetadataItems를 기존 AVKit API에 전달하여 이들 각각에 대한 문자열을 제공할 수 있습니다 어떻게 수행되는지 알아봅시다 기본적으로 제목, 자막 및 콘텐츠 설명은 미디어의 메타데이터에서 가져옵니다 그러나 필요한 경우 AVPlayerItem의 externalMetadata API를 통해 미디어의 값을 재정의할 수 있습니다
commonIdentifierTitle 식별자로 AVMetadataItem을 생성하고 이를 playerItems externalMetadata 속성에 추가하여 제목을 추가할 수 있습니다 제목은 UI를 복잡하게 하지 않도록 짧고 설명적이어야 합니다 마찬가지로 여기에 .iTunesMetadataTrackSubtitle 식별자로 AVMetadataItem을 생성하여 자막을 추가했습니다 자막은 콘텐츠 제목 위에 표시되며 콘텐츠를 설명하는 몇 단어여야 합니다
마지막으로 .commonIdentifierDescription 식별자를 사용하여 설명을 추가할 수 있습니다 그러면 제목과 부제 오른쪽에 갈매기 모양이 표시됩니다 제목을 선택하면 콘텐츠 설명이 포함된 정보 패널이 표시됩니다 설명은 콘텐츠에 대한 추가 정보가 포함된 몇 문장이어야 합니다 아무 곳이나 탭하면 정보 패널이 닫힙니다
정리하자면, iOS 시스템 플레이어를 완전히 새로운 룩 앤 필로 개편했으며 간소화된 새로운 터치 우선 상호 작용 모델과 기타 여러 사항을 적용했습니다 앱에서 AVPlayerViewController를 사용하면 Native Catalyst 지원, 새로운 하드웨어 및 기능 지원 등 시스템 플레이어를 완벽하게 지원합니다 물론 이 모든 것은 몇 줄의 코드로 얻을 수 있습니다 이제 앱에서 놀라운 재생 경험을 디자인하는 방법에 대해 알아보죠 시스템 미디어 플레이어를 재설계하기 시작했을 때 이전에 구축했던 것과 다른 플랫폼을 위해 구축한 것에서 한 걸음 물러서서 스스로에게 "무엇이 좋은 사용자 경험을 제공하는가?" 라고 물었습니다 이 과정을 여러분과 공유하고 싶었습니다 우리가 새로운 플레이어를 디자인하는 방법, 우리가 했던 방식으로 플레이어를 디자인한 이유, 그리고 우리가 생각하는 훌륭한 미디어 경험에 대한 것입니다 우리는 미디어 경험을 훌륭하게 만드는 세 가지 요소가 있다고 생각합니다 경험은 직관적이어야 합니다 한 번도 사용해 본 적이 없더라도 쉽고 친숙하고 자연스러워야 합니다 앱 내부 및 시스템 전체와 긴밀하게 통합되어야 합니다 그리고 마지막으로, 콘텐츠가 앞서야 합니다 결국 사람들은 미디어를 경험하고 앱과 디자인에 이를 반영해야 합니다 이제 경험을 직관적으로 만드는 것부터 시작하여 이 세 가지를 더 자세히 살펴보겠습니다 종종 앱이 직관적이라고 느껴질 때 이유를 설명하기 어려울 수 있습니다 딱 보면 알기 때문이죠 그렇다면 실제로 인터페이스나 경험을 직관적으로 만드는 것은 무엇일까요? 그리고 그것을 어떻게 디자인할 수 있을까요? 그것이 친숙함에서 시작된다고 생각합니다 새로운 것을 이해하는 데 도움이 되도록 과거 경험을 활용할 수 있다면 그것은 직관적입니다 작동 방식에 대한 설명이 필요하지 않거나 작동 방식에 대해 생각할 필요가 없을 때 예상한 대로 정확하게 작동합니다
우리 모두는 기술과 현실 세계가 매일 상호 작용하는 경험을 구축합니다 이 두 가지는 경험적 친숙함의 훌륭한 원천이며 새로운 시스템 미디어 플레이어를 디자인할 때 필요합니다 직관을 끌어낼 수 있는 경험에는 여러 가지가 있지만 두 가지에 집중하고 싶습니다 시스템 미디어 플레이어를 설계할 때 가장 자주 의지했던 두 가지는 플랫폼 패러다임과 현실 세계입니다 첫 번째는 매일 기술을 사용하는 경험에서 비롯됩니다 TV 리모컨을 몇 년 동안 사용하면 화살표 키가 초점을 좌우로 움직인다는 것을 알 수 있습니다 마찬가지로 터치 퍼스트 장치에서 볼륨 버튼을 탭하면 음소거됩니다 이러한 상호 작용은 익숙하기 때문에 직관적으로 느껴집니다 이러한 유형의 친숙한 상호 작용을 미디어 경험에 적용하면 앱을 보다 직관적이고 매력적이며 자연스럽게 사용할 수 있도록 만들 수 있습니다 반대로 낯설거나 예상치 못한 상호 작용을 찾는 것은 혼란스럽고 때로는 실망스러울 수도 있습니다 시스템 플레이어에서 이러한 유형의 플랫폼 친숙도를 활용한 몇 가지 예를 살펴보겠습니다 이에 대한 좋은 예는 iOS 시스템 플레이어의 프레젠테이션 및 해제 모델입니다 플레이어는 프레젠테이션을 아래쪽에서부터 등장시키고 살짝 터치하면 이를 아래로 해제할 수 있습니다 이 모델은 터치 우선 장치에서 광범위하게 사용되고 있습니다 예를 들어, 음악에서 현재 재생 중인 UI는 하단의 미니바에서 표시되며 대화식으로 아래로 스와이프하여 해제할 수 있습니다 그러나 어떤 경우에는 기술에 대한 이해가 아니라 일상 생활에서 경험을 활용할 수 있습니다
이러한 유형의 경험은 실제 세계에서 발생합니다 우리는 수백만 년 동안의 진화를 통해 자연 과정에 대해 본능적으로 깊이 이해할 수 있게 되었습니다 이러한 이해를 활용하여 프트웨어에서 친숙하고 직관적인 경험을 구축할 수 있습니다 이에 대한 좋은 예는 iOS 플레이어의 새로운 스크롤 제스처입니다 테이블을 가로질러 장난감 자동차를 굴리는 것과 유사하게 비디오를 스와이프할 때마다 추진력이 생겨 직접적인 상호작용이 멈춘 뒤에도 천천히 멈출 때까지 타임라인이 움직임을 계속합니다 여기에서의 추진력만으로도 실제 세계의 움직이는 물체와 연관됩니다 이 연관성은 상호 작용의 미묘한 깊이를 발견하는 데 도움이 됩니다 장난감 자동차처럼 더 세게 밀거나 여러 번 연속으로 밀면 더 빨리 갈 수 있습니다 그리고 잡으면 멈춥니다 자연스러운 행동이니까 자연스럽게 느껴지죠 그리고 이것의 최대 장점은 시스템 플레이어를 사용하면 앱이 직관적으로 느껴진다는 것입니다 우리가 구축하고 물려받은 모든 자연스러운 상호 작용과 시스템 플레이어에 대한 사람들의 직관력과 친숙함 tvOS, iOS 및 macOS 사용자가 기본적으로 이해할 수 있는 방식으로 최적화된 모든 디자인 패러다임까지 이 모든 것을 코드 몇 줄로 얻을 수 있습니다
직관적인 디자인 구축은 훌륭한 미디어 경험 제공을 위한 한 부분이지만 사람들이 기대하는 모든 기능과 통합 지점이 없으면 앱이 의도치 않게 콘텐츠에서 초점을 멀어지게 할 수 있습니다 이는 놀라운 미디어 경험의 두 번째 중요한 측면인 긴밀한 통합으로 이어집니다 경험이 긴밀하게 통합되면 사람들이 원하는 모든 기능과 장치가 제대로 작동합니다 그리고 중요한 것은 기대에 부합하는 방식으로 일한다는 것입니다 사람들이 장치를 사용함에 따라 플랫폼의 기능에 의존하는 데 익숙해집니다 예를 들어, 제어 센터를 아래로 당기고 Now Playing 미디어 컨트롤에 채워진 콘텐츠를 보거나 TV 쇼를 시청하는 동안 알림에 응답하고 비디오가 Picture in Picture에 원할하게 계속되도록 합니다 이 긴밀한 시스템 통합을 앱에 구축하는 것이 경험을 원활하게 만드는 열쇠입니다 앱은 시스템의 네이티브 일부처럼 느껴져야 하며 우리는 이를 가능하게 하는 데 필요한 도구를 제공하기 위해 노력하고 있습니다 여기에는 콘텐츠를 검색할 수 있도록 하는 CoreSpotlight 통합과 시스템 미디어 UI에 콘텐츠를 표시할 수 있는 Now Playing 정보 키보드나 TV 리모컨에서 재생 버튼을 누르는 것과 같은 것에 앱이 응답할 수 있도록 하는 MediaRemote 명령 등이 포함됩니다 미디어를 TV 앱에 직접 통합하여 더 많은 청중에게 콘텐츠를 제공하는 기능도 제공합니다 앱을 네이티브하게 하는 것 외에도 사람들이 좋아하는 모든 기능을 제공하는 것이 중요합니다 AirPlay, SharePlay 및 Picture in Picture와 같은 기능이죠 사람들이 원하는 기능을 제공하면 앱 사용 경험이 향상될 것이라고 생각합니다 사람들은 다양한 기기를 이용하여 더 많은 입력 포맷으로 앱을 사용할 것입니다 누구나 경험에 액세스할 수 있도록 할 때 필요한 지원을 제공하는 것은 매우 중요합니다 이는 특히 tvOS에서 아주 중요하며 누구든지 앱을 사용할 수 있도록 하기 위해 사용가능한 원격장치를 지원 지원하는 것이 필요하기 때문입니다 그러므로 항상 tvOS에서 시스템 미디어 플레이어를 사용하는 것을 권장하고 있습니다 앱은 모든 TV 리모컨, 키보드, 트랙패드, 게임 컨트롤러 및 헤드폰 컨트롤과 함께 유연한 경험을 보장해야 합니다. 또한 앱의 UI 요소가 디스플레이의 둥근 모서리 또는 노치와의 충돌을 방지하기 위해 화면의 안전 영역 내에 그려졌는지 확인해야 합니다 우리는 이러한 모든 통합 지점, 기능 및 하드웨어 구성에 대한 지원을 구축하는 것이 어려울 수 있다는 점을 파악했습니다 AVPlayerViewController를 구축한 이유도 바로 그것입니다 코드 몇 줄 만으로도 앱을 사용하는 모든 사람에게 놀라운 미디어 경험을 제공할 수 있으니까요
그리고 마지막으로, 이 모든 것들은 미디어 경험을 디자인할 때 가장 중요한 방향으로 우리를 안내합니다 콘텐츠를 전면이 내세우는 거죠 이것이 디자인의 주요 목표가 되어야 하며 훌륭한 미디어 경험을 정의할 때 중심이 되어야 합니다 앱이 직관적이라고 느낄 때 사람들이 기대하는 모든 통합 지점과 모든 기능이 제대로 작동하면 콘텐츠에 초점을 맞추고 나머지는 모두 백그라운드로 사라집니다
하지만 콘텐츠 디자인과 관련하여 염두에 두어야 할 몇 가지 사항이 있습니다 인터페이스와 시스템 모두에서 적절한 메타데이터를 제공해야 합니다 이 정보를 제공하면 미디어에 컨텍스트를 제공하고 시스템이 제어 센터 및 잠금 화면에서 더 나은 경험을 제공할 수 있습니다 여기에는 제목 및 부제, 설명, 미리보기 이미지 시즌 및 에피소드 정보, 라이브 스트림의 시작 및 종료일 등이 포함됩니다 미디어를 항상 원래의 종횡비로 유지하세요 이렇게 하면 시스템이 화면의 올바른 위치에 비디오를 배치할 수 있습니다 콘텐츠에 레터박스를 넣으면 이러한 경험을 제공합니다 또는 이렇게요 가능한 경우 최신 미디어 표준에 대한 지원을 포함해야 합니다 예를 들면, HDR 및 Dolby Atmos입니다 마지막으로, 여러 언어에 대한 오디오 및 자막 트랙을 포함해야 합니다 가능한 한 많은 사람들이 미디어에 액세스할 수 있도록 말이죠
이 강연의 본 섹션에서 꼭 하나 명심해야 할 점은 콘텐츠에 계속 집중해야 한다는 것입니다 우리는 AVPlayerViewController를 통해 제공되는 시스템 미디어 플레이어를 구축하여 개발자가 가능한 한 쉽게 해당 목표를 달성할 수 있도록 했습니다 이제 AVPlayerViewController에 추가된 몇가지 새로운 기능을 살펴보죠 새로운 시각 지능 기능부터 시작하면 이 예에서는 코드 스니펫이 포함된 프레임에 일시 중지된 비디오가 있습니다 코드 스니펫을 길게 누르면 선택됩니다 그런 다음 플레이그라운드에 직접 복사 및 붙여넣어 사용해 볼 수 있습니다 이것은 macOS에서도 잘 작동합니다 동일한 코드 위로 커서를 가져가면 I-빔이 표시되고 이는 텍스트를 선택할 수 있음을 나타냅니다 그런 다음 커서를 사용하여 강조 표시하거나 CMD+A를 사용하여 모두 선택을 할 수 있습니다 이 기능과 함께 사용할 새 API를 소개합니다 iOS의 AVPlayerViewController 및 macOS의 AVPlayerView에서 사용할 수 있는 allowVideoFrameAnalysis는 이 기능을 토글합니다 이것은 새 SDK와 링크되는 모든 앱에 활성화됩니다 allowVideoFrameAnalysis가 true로 설정되어 있는 동안 미디어가 일시 중지되면 AVKit은 설정된 기간 후에 현재 비디오 프레임 분석을 시작합니다 스크롤하는 동안에는 성능상의 이유가 있거나 FairPlay 보호 콘텐츠인 경우에는 프레임 분석을 하지 않습니다 일반적으로 사람들은 대부분의 상황에서 이 기능을 기대하죠 그러나 응용 프로그램에서 적절하게 적절하게 시각적 분석을 비활성화하려는 경우가 있습니다 예를 들어 비디오 컬렉션 보기와 같은 성능이 중요한 응용 프로그램이나 스플래시 화면과 같이 비디오와의 상호 작용이 예상되지 않는 경우입니다 시각적 지능 기능 세트를 앱에 통합하는 방법에 대한 자세한 내용은 VisionKit에 대한 관련 강연을 참조하세요 다음으로 전면 광고에 대한 몇 가지 개선 사항을 살펴보겠습니다 지금까지 전면 광고는 tvOS의 AVPlayerViewController에서만 지원되었습니다 iOS에도 동일한 수준의 지원을 제공한다는 소식을 전하게 되어 기쁩니다 전면 광고가 스트림에 있거나 AVPlayerInterstitialEvents를 통해 로컬로 정의된 경우, 이제 타임라인을 따라 표시됩니다 타임라인이 마커에 도달하면 전면 광고 재생이 시작됩니다 전면 광고가 이미 HLS 재생 목록에 완전히 정의되어 있는 경우 이 동작이 자동으로 적용되므로 채택할 필요가 없습니다 그렇지 않은 경우 또는 앱에 더 많은 사용자 지정 동작이 필요한 경우 몇 가지 새로운 API도 도입중입니다 AVInterstitialTimeRange가 tvOS에서 iOS로 옮겨지고 있습니다 이는 tvOS에서도 가져오는 AVPlayerItem 속성 interstitialTimeRanges에 자동으로 채워집니다 HLS 스트림을 사용하는 경우 스트림의 각 전면 광고에 AVInterstitialTimeRange가 합성됩니다. AVFoundation API를 통해 로컬에서 전면 광고 이벤트를 생성할 때 AVInterstitialTimeRange는 각 AVPlayerInterstitialEvent에 합성됩니다 그러나 tvOS와 달리 interstitialTimeRanges는 읽기 전용 속성입니다 전면 광고는 HLS 스트림 내에서 또는 AVPlayerInterstitialEvents를 통해 정의해야 합니다 tvOS 앱에서 지원을 마이그레이션하는 경우 이는 본질적으로 translatePlayerInterstitialEvents를 yes로 설정하는 것과 같습니다 또한 tvOS에서 두 가지 델리게이트 메서드도 가져옵니다 이 둘을 통해 전면 광고가 재생을 시작하거나 종료했는지 알 수 있습니다 이것을 API에 사용하여 iOS에서 프리롤 광고에 건너뛰기 버튼을 추가하는 방법을 살펴보겠습니다 먼저 기본 미디어 플레이어에 필요한 AVPlayerInterstitialEventController를 생성합니다 다음으로 전면 광고 이벤트를 만듭니다 이에 대한 몇 가지 제한 사항을 정의하겠습니다 이러한 제한은 전면 광고 내 탐색을 방지하고 전면 광고를 건너뛰는 것을 방지합니다 그런 다음 이벤트 컨트롤러에 전면 광고를 추가합니다 마지막으로 새로운 willPresentInterstitial 델리게이터 콜백을 구현하여 설정된 간격 후에 광고 건너뛰기 버튼을 표시할 수 있습니다 버튼을 누르면 전면 광고가 취소됩니다 정말 쉽죠 이 광고 건너뛰기 버튼과 같은 사용자 정의 UI 요소를 AVPlayerViewController에 추가할 때 항상 contentOverlayView의 하위 보기로 추가해야 합니다 전면 광고를 HLS 재생 목록에 바로 통합하는 방법 또는 AVFoundation 전면 광고 API를 사용하넌 방법에 대해 자세히 알아보려면 HLS 동적 프리롤 및 미드롤 탐색에 대한 관련 강연을 확인하세요 이제 올해 모든 플랫폼에서 추가한 새로운 기능인 재생 속도 제어에 대한 기본 지원에 대해 알아보겠습니다 AVPlayerView와 AVPlayerViewController는 이제 추가된 몇 가지 새로운 API를 사용하여 재생 속도 메뉴를 선택적으로 표시할 수 있습니다
macOS, iOS 및 tvOS에서 이 기능을 사용할 수 있습니다 함께 살펴보시죠 tvOS에서는 전송 표시줄에 새로운 컨트롤이 표시됩니다 컨트롤을 선택하면 선택할 수 있는 재생 속도 목록이 표시됩니다 iOS에서 이 메뉴는 전송 제어 오버플로 메뉴에 나타납니다 마찬가지로 macOS에서는 오버플로 메뉴에 컨트롤이 나타납니다 새로운 iOS, macOS 및 tvOS SDK에 연결된 모든 앱은 추가 변경 없이 자동으로 이 기능을 사용할 수 있습니다 그러나 사용 사례에 따라 일부 응용 프로그램은 속도 목록을 수정하거나 프로그래밍 방식으로 속도를 선택하거나 메뉴를 완전히 비활성화할 수 있습니다 이러한 사용 사례를 수용하기 위해 AVPlayerView 및 AVPlayerViewController에 몇 가지 새로운 API를 추가했습니다 함께 살펴보죠
먼저 AVKit에 새 클래스인 AVPlaybackSpeed를 추가했습니다 AVPlaybackSpeeds는 재생 UI에서 사용자가 선택할 수 있는 속도 옵션을 나타내며 세 가지 속성이 있습니다 재생 속도가 선택될 때 플레이어에 설정될 초기화되고 정의된 '속도 값'이 그 중 하나입니다 접근성 시스템 내에서 재생 속도를 나타내는 데 사용되는 '현지화된 이름'이 두 번째 속성입니다 예를 들어, 속도가 2.5인 경우 "2.5배 속도"의 localizedName을 사용할 수 있습니다 그리고 현지화된 숫자 이름이 이에 해당됩니다 이 값은 속도 속성에서 합성되며 재생 속도 메뉴에 표시되는 문자열이 됩니다 앱에서 플레이어 외부의 사용자 지정 재생 속도 메뉴가 필요한 경우 이 문자열을 사용하여 속도를 나타냅니다
마지막으로 AVPlaybackSpeed는 가능할 때마다 사용해야 하는 시스템 기본 속도 목록을 정의합니다 AVPlayerView 및 AVPlayerViewController의 새로운 API와 함께 AVPlaybackSpeed를 사용하여 앱에 맞게 이 기능을 조정할 수 있습니다 속도 속성을 사용하면 재생 속도의 사용자 지정 목록을 정의할 수 있습니다 기본적으로 이 속성은 AVPlaybackSpeed systemDefaultSpeeds 목록으로 설정됩니다 이것을 빈 목록으로 설정하면 메뉴가 숨겨집니다 선택한 속도 속성은 현재 활성화된 속도를 반환합니다 마지막으로 selectSpeed 기능을 사용하면 현재 속도를 프로그래밍 방식으로 선택할 수 있습니다 플레이어 UI 외부에서 속도를 명시적으로 선택한 경우에만 이 기능을 사용해야 합니다 선택한 재생 속도를 암시적으로 중단시키지 마세요 예를 들어보죠 여기에서 AVPlayerViewController를 생성하고 보여줍니다 기본적으로 이는 재생속도에 관한 시스템이 제공한 목록을 사용합니다 AVPlaybackSpeed를 생성하고 AVPlayerViewController의 속도 목록에 추가하여 메뉴에 새로운 속도를 추가할 수 있습니다 빈 속도 목록을 설정하여 메뉴를 비활성화할 수도 있습니다 그만큼 간단하죠 하지만 재생을 시작하려면 항상 AVPlayer play()를 호출해야 합니다 선택한 속도가 1.0이 아닐 수 있으므로 setRate:1.0을 호출하여 재생을 시작하지 마세요 그럼 이제 세션을 정리해 보겠습니다 새롭게 디자인된 iOS 시스템 플레이어를 살펴보았고 자신만의 놀라운 재생 경험을 디자인할 수 있는 방법을 들었으며 새롭고 멋진 시각적 인텔리전스 기능을 확인하고 새로운 전면 광고 및 재생 속도 API를 살펴보았습니다 세션이 즐거웠기를 바라며 여러분이 앱에서 이러한 기능을 볼 수 있기를 기대합니다 남은 컨퍼런스로 유익한 시간이 되길 바랍니다
-
-
4:08 - Setting content external metadata
// Setting content external metadata let titleItem = AVMutableMetadataItem() titleItem.identifier = .commonIdentifierTitle titleItem.value = // Title string let subtitleItem = AVMutableMetadataItem() subtitleItem.identifier = .iTunesMetadataTrackSubTitle subtitleItem.value = // Subtitle string let infoItem = AVMutableMetadataItem() infoItem.identifier = .commonIdentifierDescription infoItem.value = // Descriptive info paragraph playerItem.externalMetadata = [titleItem, subtitleItem, infoItem]
-
19:03 - Creating a skip button for a preroll ad
// Creating a skip button for a preroll ad let eventController = AVPlayerInterstitialEventController(primaryPlayer: mediaPlayer) let event = AVPlayerInterstitialEvent(primaryItem: interstitialItem, time: .zero) event.restrictions = [ .requiresPlaybackAtPreferredRateForAdvancement, .constrainsSeekingForwardInPrimaryContent ] eventController.events.append(event) func playerViewController(playerViewController: AVPlayerViewController, willPresent interstitial: AVInterstitialTimeRange) { showSkipButton(afterTime: 5.0, onPress: { eventController.cancelCurrentEvent(withResumptionOffset: CMTime.zero) }) }
-
21:14 - Setting custom playback speeds
// Setting custom playback speeds let player = AVPlayerViewController() player.player = // Some AVPlayer present(player, animated: true) let newSpeed = AVPlaybackSpeed(rate: 2.5, localizedName: "Two and a half times speed”) player.speeds.append(newSpeed)
-
23:02 - Hiding the playback speed menu
// Hiding the playback speed menu let player = AVPlayerViewController() player.player = // Some AVPlayer present(player, animated: true) player.speeds = []
-
-
찾고 계신 콘텐츠가 있나요? 위에 주제를 입력하고 원하는 내용을 바로 검색해 보세요.
쿼리를 제출하는 중에 오류가 발생했습니다. 인터넷 연결을 확인하고 다시 시도해 주세요.