Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: HLS 캐싱 적용 #350

Merged
merged 2 commits into from
Jan 22, 2024
Merged

feat: HLS 캐싱 적용 #350

merged 2 commits into from
Jan 22, 2024

Conversation

loinsir
Copy link
Collaborator

@loinsir loinsir commented Jan 21, 2024

🧑‍🚀 PR 요약

  • HLS 세그먼트 캐싱을 적용했습니다.

📌 변경 사항

  • SPM 라이브러리 의존성 추가했고, 우선 재생화면에만 캐싱을 적용시켰습니다.
  • AppDelegate에 앱 실행과 함께 프록시 서버 start하고, static 메서드로 url 변환해서 playeritem에 넣어주면 됩니다.
📸 ScreenShot
image 로컬서버에서 ts 세그먼트 로드 할 때, 해당 세그먼트가 캐시에서 나오는지, 서비스 서버에서 가져온 것인지 로그를 찍도록 했습니다. 한번 시청한 동영상은 캐싱이 되는 것을 확인할 수 있습니다.

Linked Issue

close #346

@loinsir loinsir self-assigned this Jan 21, 2024
@loinsir loinsir changed the title I os/feat#346 feat: HLS 캐시 적용 Jan 21, 2024
@loinsir loinsir changed the title feat: HLS 캐시 적용 feat: HLS 캐싱 적용 Jan 21, 2024
@@ -27,6 +28,8 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
setNavigationControllerAppearance()
setTabBarAppearance()

hlsCachingServer.start(port: 12345)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

포트번호는 그냥 무작위로 정해두신건가여?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

넹 맞습니다

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

포트번호는 따로 보안 처리를 안해도 괜찮은건가요? 문득 궁금쓰

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

외부로 노출되는 백엔드 서버가 아니기에 보안 처리가 필요없다고 생각합니다.

Copy link
Member

@anyukyung anyukyung left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

아이고 고생하셨습니다 🥺
다만 변경사항 생길 때마다 별도 레포를 확인해야하는데 이게 local 패키지로 추가할 때랑 따로 레포파서 패키지로 추가할 때의 장단점인 것 같기도 하네요..?

아예 저희 오가니제이션을 새로 파서 내부에 라이브러리 레포를 만드는 방법도 그나마 괜찮을 것 같은데, 얘기해보구 방법을 통일하면 좋을 것 같슴e다 ㅎ.ㅎ

@loinsir
Copy link
Collaborator Author

loinsir commented Jan 22, 2024

아이고 고생하셨습니다 🥺 다만 변경사항 생길 때마다 별도 레포를 확인해야하는데 이게 local 패키지로 추가할 때랑 따로 레포파서 패키지로 추가할 때의 장단점인 것 같기도 하네요..?

아예 저희 오가니제이션을 새로 파서 내부에 라이브러리 레포를 만드는 방법도 그나마 괜찮을 것 같은데, 얘기해보구 방법을 통일하면 좋을 것 같슴e다 ㅎ.ㅎ

로컬로 SPM을 추가할 수 있다는 사실을 몰랐었네요...ㅠ

@chopmozzi
Copy link
Collaborator

Dev Log 아직 작성 중이신거 같은데 기대가 되네요. 궁금한게 cache size가 2gb던데 그럼 앱 실행 중 메모리가 2gb까지 올라갈 수 있는건가요?

@chopmozzi
Copy link
Collaborator

로컬에 저장하는 방식 대신 프록시 서버를 만들어 캐싱하는 이유도 궁금합니다!

Copy link
Collaborator

@chopmozzi chopmozzi left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

고생하셨습니다!!!

@loinsir
Copy link
Collaborator Author

loinsir commented Jan 22, 2024

Dev Log 아직 작성 중이신거 같은데 기대가 되네요. 궁금한게 cache size가 2gb던데 그럼 앱 실행 중 메모리가 2gb까지 올라갈 수 있는건가요?

네 지금은 그렇고, 이 부분은 고민 중입니다. 기기 전체 메모리 크기를 파악해서 비율로 재조정 할 수도 있을 것 같아요

@loinsir
Copy link
Collaborator Author

loinsir commented Jan 22, 2024

로컬에 저장하는 방식 대신 프록시 서버를 만들어 캐싱하는 이유도 궁금합니다!

프록시 서버도 로컬에 저장해놓는 방식입니다.
AVPlayer에서 리소스에 대한 요청을 보내는 AVAssetResourceLoaderDelegate에서는 ts 요청을 가로챌 수 없기 때문입니다.
오직 m3u8 플레이리스트 요청만 확인할 수 있습니다.

@loinsir loinsir merged commit 11797e3 into iOS/dev Jan 22, 2024
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants