본문 바로가기

분류 전체보기151

Jetpack Media3 나오게 된 배경 Media3는 기존에 존재하던 라이브러리(ex. Jetpack Media, Media2,Exoplayer 등등)에서 UI 재생, 그리고 Media Session 과 같은 공통 기능을 정의했으며 파편화 되었던 각 라이브러리들간의 복잡성을 추상화 하였다. 또한 공통으로 사용할 수 있는 Player인터페이스를 정의하여 편의성을 증대 시켰다. 이번 글은 Media3에 대해 알아보도록 하자. ☆중요 Media3이 이전 미디어 API와 구별되는 주요 특징 중 하나는 더 이상 구성요소 간 커넥터가 필요하지 않다는 것이다. 새로운 MediaSession클래스는 UI와 마찬가지로 Player 인터페이스를 구현하는 모든 클래스를 사용한다. ExoPlayer와 MediaController는 모두 이 인터페이.. 2023. 11. 15.
[DroidKnights 2023] 김준비 - Coroutine Deep Dive - Android 실전편 이번 글은 DroidKnights 2023에 나온 김준비님의 Coroutine Deep Dive의 내용을 정리한 글입니다. What is Coroutine? Routine : 컴퓨터 프로그램의 일부로써 특정한 일을 실행하기 위한 일련의 명령 SubRoutine? 프로그램 가운데 하나 이상의 장소에서 필요할 때마다 되풀이 해서 사용할 수 있는 부분적 프로그램이며 실행 후에는 메인 루틴이 호출한 장소로 되돌아간다. fun a() { b() c() } Coroutine 이란? 일시 중단(suspend)과 재개(resume)가 가능한 루틴이며 특정 Thread에 결합되지 않으며, 하나의 Thread에서 중단하고 다른 Thread에서 재개 가능한 부분적 프로그래밍이다. How does suspension.. 2023. 11. 14.
미디어 용어 사전3 - Exoplayer BandwidthMeter(대역폭 측정기) 인터넷이란 큰 파이프 같은 거라고 생각했을때 이 파이프의 크기가 바로 우리의 "대역폭"이다. 그래서 이 파이프를 통해서 얼마나 많은 데이터가 흐를 수 있는지 알면 좋다. 이때, "대역폭 미터"는 이 파이프에서 얼마나 데이터가 흐르고 있는지를 알려주는 도구이다. 이 도구가 데이터의 양을 모니터링해서 알려준다. 그럼 예를 들어, 온라인에서 동영상을 본다고 상상했을때 동영상은 화질에 따라 다르게 나온다. 화질이 좋을수록 더 많은 데이터가 필요한데 대역폭 미터는 우리의 인터넷 파이프가 얼마나 큰지를 알려주고, 그에 맞게 동영상의 화질을 선택할 수 있게 해준다. 빠른 인터넷이면 화질을 높게 선택하고, 느린 인터넷이면 화질을 낮춰서 끊김 없이 동영상을 즐길 수 있다. 그래.. 2023. 11. 14.
미디어 용어 사전2 - Android AudioTrack AudioTrack은 안드로이드에서 제공하는 API로, 간단하게 말해 안드로이드 앱에서 소리를 재생하는 데 사용되는 도구이다. 이 API를 통해 음악, 효과음, 또는 다양한 오디오 소스를 앱에서 제어하고 재생할 수 있다. 예를 들어, 게임 앱에서 특정 상황에 맞는 효과음을 재생하거나 음악 앱에서 노래를 재생하는 데에 사용될 수 있다. AudioTrack은 오디오 데이터를 다루고 재생하는 데 도움이 되며, 앱 개발자들은 이를 활용하여 사용자에게 더 풍부하고 흥미로운 오디오 경험을 제공할 수 있다. AudioTrack 클래스는 Java 어플리케이션에서 하나의 오디오 자원을 관리하고 재생하는 역할을 한다. 이 클래스는 PCM(펄스 코드 변조) 오디오 버퍼를 오디오 장치로 전송하여 재생하는 .. 2023. 11. 14.
미디어 용어 사전1 - Basic 인코딩(코딩) / 디코딩 인코딩은 정보를 특정 형식으로 변환하는 과정을 의미한다. 이는 데이터를 효율적으로 저장하거나 전송하기 위해 주로 사용된다. 예를 들어, 비디오 인코딩은 큰 용량의 원본 비디오 데이터를 작은 크기로 압축하는 과정을 말한다. 반면, 디코딩은 인코딩된 데이터를 원래의 형태로 복구하는 과정이다. 디코딩을 통해 우리는 인코딩된 비디오 파일을 원래의 화질로 볼 수 있게 된다. 간단히 말해, 인코딩은 정보를 효율적으로 다루기 위해 변환하는 과정이고, 디코딩은 변환된 정보를 원래대로 복구하는 과정입니다. 코덱 '코덱'은 '코더'와 '디코더'의 합성어로, 미디어 파일을 압축(인코딩)하거나 압축을 풀어 원래의 상태로 되돌리는(디코딩) 기술을 의미한다. 코덱은 미디어 데이터를 효율적으로 다루기 위한.. 2023. 11. 12.
[DroidKnights 2023] 빈혈(anemic) 도메인 모델과 쓸모없는 유스케이스 그리고 비대한(Bloated) 뷰모델에 대해 생각해보기 이번 글은 DroidKnights 2023 박종혁 님의 빈혈(anemic) 도메인 모델과 쓸모없는 유스케이스 그리고 비대한(Bloated) 뷰모델에 대해 생각해보기 에 대해서 정리와 나의 생각을 작성해보는 글이다. 이렇게 생긴 코드, 보신 적 있으신가요? 우리는 구글 아키텍쳐 UI Layer -> Domain Layer -> Data Layer 로 구성되어 왔다. 그런데 우리는 관습처럼 작성하는 아키텍쳐가 과연 객체지행에 대해서 잘 따르고 있는지 의문이다. 아래 예시를 보자. // Domain Model data class Developer(name: String, age: Int) data class DeveloperList(val list: List) // Repository interface Dev.. 2023. 11. 7.
ExoPlayer / Player Player란? 'Player' 클래스는 미디어 재생을 관리하고 제어하는 ​​데 핵심적인 역할을 한다. 핵심적인 역할은 다음과 같다. 미디어 제어 : Player는 미디어 재생을 위한 리모컨과 같다. 이를 사용하여 오디오 또는 비디오 콘텐츠의 재생을 시작, 일시 중지, 재개 및 중지한다. Track 관리 : 오디오, 비디오, 텍스트(자막) 등 다양한 트랙을 관리한다. 'Player'를 사용하면 활성화된 트랙을 제어하고 해당 설정을 조정할 수 있다. 미디어 세션 통합 : Jetpack Media3의 Player는 Android 미디어 세션 API와 통합된다. 이는 시스템 미디어 컨트롤과 원활하게 작동하여 사용자가 알림 컨트롤, 잠금 화면 및 기타 외부 인터페이스에서 재생을 제어할 수 있음을 의미한다. 이벤.. 2023. 11. 6.
MPEG-DASH 란 들어가기 전 Adaptive Streaming 은 적응형 스트리밍으로 사용자의 네트워크 상태에 적응해서 스트리밍을 해주는 기술이다. 동영상 콘텐츠를 다양한 해상도로 인코딩해서 저장하고 이를 잘게 잘게쪼개어 저장을 해놨다가 사용자의 네트워크 상황에 따라서 최적의 동영상 콘텐츠 조각을 가져와 스트리밍 해주는 방식입니다. 대표적으로 Youtube가 이러한 방식이다. 통신 상황에 따라서 자동으로 해상도가 좋아졌다 나빠졌다하는걸경험해보셨을 것이다. 이를 이용하면 서비스를 제공하는 서버의 트래픽을 관리할 수 있을 뿐 아니라 사용자는 끊기지 않고 동영상 시청이 가능하게 된다. MPEG-DASH 란 MPEG-DASH는 국제 표준화된 최초의 적응 비트레이트 HTTP 기반 스트리밍 솔루션이다. 이전에는 동영상을 통째로 받.. 2023. 11. 3.
DroidKnights - Jetpack Media3로 좋은 콘텐츠 소비 경험 구현하기 이번 글은 DroidKnights에서 발표한 류기민님의 Jetpack Media3로 좋은 콘텐츠 소비 경험 구현하기를 정리한 글입니다. 이전에는.... 2000년 중 후반쯤, 우리가 동영상을 볼 때 위와 같은 버퍼링표시를 보곤 했었다. 이때는 스트리밍이 고려되지 않은 상태여서 파일을 통째로 전달받아 재생하는 형태였다. 이때는 1%도 되지 않으면 재생이 되지 않았었다... 그랬던 시절을 지나... 2010년에 들어서 모다일 시장이 열려 스트리밍 시장이 확대되었다. 그래서 스트리밍을 위한 국제 표준 기술이 등장하게되는데...!! DASH Dynamic Adaptive Streaming over HTTP ISO 표준으로 개발된 HTTP Adaptive Streaming 의 한종류이다. Adaptive에서 알 .. 2023. 11. 2.
Image Loader info 이번 목차에서는 Image Loader에 대해서 정리하는 글을 적으려 한다. 나는 다양한 SNS앱들의 빠른 이미지 로딩을 보며 어떻게 구현했길래 이미지를 로딩하는 화면을 안정적으로 동작시키는지가 궁금해졌다. 사실 나는 안드로이드 개발을 하면서 Glide, Piccaso, Coil 등등 Third Party 라이브러리만 사용만 해봤지 어떤 프로세스를 가지고 있는지, 이들의 차이점들에 대해서는 깊게 공부하지 않았기에 이번 글에서 정리해볼 예정이다. 이미지 로딩 라이브러리는 무엇인가? https://d2.naver.com/helloworld/429368 위의 블로그를 읽으면 이해가 된다. 그니까 이렇게 엄청나고 귀찮은 단계를 거쳐야하는 것을 처리해준다는 것이다. 위의 블로그에 작성된 엄청나고 귀찮은 .. 2023. 10. 22.
CustomBottomSheet CustomBottomSheet 2023. 10. 14.
디자인 시스템을 담당하며 겪었던 일들 https://yozm.wishket.com/magazine/detail/1846/ 디자인 시스템 구축기: ③타이포그래피와 프로젝트 관리 | 요즘IT 디자인 시스템은 디자인 원칙과 규격, 재사용할 수 있는 UI 패턴과 컴포넌트, 코드를 포괄하는 시스템을 말한다. 디지털 제품 개발 환경에서 이러한 디자인 시스템은 점점 더 중요해지고 있다 yozm.wishket.com https://medium.com/mesmerhq/designing-accessible-text-for-android-variable-font-and-screen-sizes-392fd386aea5 Designing accessible text for Android: variable font and screen sizes Designing An.. 2023. 9. 19.
RecyclerView 안드로이드 개발자라면 당연히 아는 Recyclerview. 나는 사용법에 대해서만 띄엄띄엄 알 뿐, 완벽하게 이해하고 사용하고 있지는 않은 거 같아 이번 블로그를 작성하며 완벽히 알고서 사용해보로록 하자. 이전에는.... 고대의 안드로이드 개발자들은 위와 같은 ListView를 만들 때 ListView라는 라이브러리를 사용했었는데....(필자의 처음 개발할때도 ListView를 사용) 아래와 같은 문제점이 있었다. 뷰 재사용 : 뷰를 재사용하기 위해 복잡한 코드를 작성해야 했고 다른 비슷하지만 획일화 되지 않는 어떠한 패턴을 사용하여 개발하였었다.(당시의 블로그를 가보면 다들 만드는 법이 다 다름) 레이아웃 유연성 : ListView는 세로 스크롤을 지원하는 선형 리스트만을 제공해서 좀더 복잡한 뷰를 그.. 2023. 8. 24.
에러 추척 Firebase Crashlytics Android앱을 개발하여 GooglePlayStore에 배포를 하면 많은 이용자들이 사용하게 되는데 사용자들에게서 에러가 발생하여 앱이 강제로 종료된다고 컴플레인이 들어오곤 한다. 그럴때 나는 분명 잘해서 올렸는데 이놈의 안드로이드는 수많은 기기를 대응해야 하기에 직접 확인해보지 않는 이상 알 수 가없다. 이럴때 사용하는 방법은 파이어 베이스의 크래시리틱스(Crashlytics) 라는 기능이다. 파이어 베이스에서 시키는 데로 설정을 해주고 아래와 같이 Crash 버튼을 만들어 테스트를 해보면 아래와 같이 Crash가 난 위치를 알 수 있다. 소감 : 진짜 옛날 개발자들은 어떻게 CS 처리를 한 것인가 의문이 든다....!!! 2023. 8. 14.
Retrofit에 대해 알아보자. 먼저 글을 작성하기 전 안드로이드 진형에서 가장 많이 사용되는 네트워크 통신 라이브러리는 Retrofit이다. 나는 Retrofit을 사용하는 방법에 대해서만 알지 완전히 쏙쏙 사용하는 방법은 알지 못한다... 그래서 이번에 완벽 정리하는 겸해서 작성해보겠다. Retrofit이란 먼저 GPT 선생에게 물어보자. Retrofit은 Square 사에서 개발한 네트워크 통신 라이브러리로, REST API와 통신하기 위해 사용됩니다. Retrofit은 안드로이드 앱이 REST 기반 웹 서비스와 손쉽게 통신할 수 있게 해주며, 필요한 데이터를 빠르게 얻어오는 데 도움을 줍니다. - Retrofit의 장점은 다음과 같습니다: 1. 통신 코드를 간결하게 작성할 수 있습니다. 2. 비동기와 동기 호출 모두를 지원합니다.. 2023. 8. 12.