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: 동영상 선택, 편집 기능 #152

Merged
merged 19 commits into from
Nov 30, 2023
Merged

feat: 동영상 선택, 편집 기능 #152

merged 19 commits into from
Nov 30, 2023

Conversation

anyukyung
Copy link
Member

@anyukyung anyukyung commented Nov 30, 2023

🧑‍🚀 PR 요약

작업량이 많진 않은데, 처음 써보는 것들이라 학습하는데 시간이 좀 걸렸습니다!

PHPicker를 이용한 동영상 선택기능

  • PHPicker를 이용해서 동영상을 가져오기위해loadFileRepresentation 사용했습니다.

Note

이 메소드는 컴플리션 핸들러가 반환되기 전!까지만 선택된 동영상의 임시파일 URL을 유지시킵니다.
그래서 핸들러가 반환되면 임시파일은 즉시 삭제됩니다..

  • 컴플리션 핸들러가 반환되기 전에 FileManager에 tmp 디렉토리에 파일을 저장해두었습니다.
    • fileManager에 비디오를 저장하고 삭제하는 로직은 간단하긴하지만 VideoFileWorker로 분리했습니다
    • tmp 디렉토리가 os에 의해서 자동으로 관리된다고는 하는데, 혹시몰라 layover 디렉토리 내부에 저장해서 나중에 한꺼번에 삭제할 수 있도록 했어요.
    • 또 editViewController가 disappear될 때 삭제하도록 했습니다.
    • 이를 위해서 videoEditorVC를 OverCurrentContext로 Present해서 editViewController가 불필요하게 disappear되지 않도록 했어요
  • 이렇게 해서 임시파일을 copy한 새로운 URL을 다음 화면 EditVideoVC로 넘깁니다.

전달받은 URL로 영상편집

  • 전달받은 copy URL로 UIViewEditorViewController를 이용해 영상을 편집합니다.
  • 사실 저는 .. 편집하면 timeRange를 알려줄거라고 생각했는데.
  • 아예 편집된 영상URL을 돌려줍니다.. ^^ 이렇게 편집된 영상은 내부적으로 다시 tmp 디렉토리에 저장됩니다..
    스크린샷 2023-11-30 오후 5 47 41

image
두배가돼..메모리가 두두두.. 두배가돼..


3초~60초 영상 길이 제한

  • 처음에는 EditVideoVC으로 넘기기전에 영상 선택화면에서 최소 영상 길이를 제한하려 했는데 구현하는데 어려움이 있었습니다.
  • 동영상을 가져오는 loadFileRepresentation 메소드는 컴플리션 핸들러가 끝나면 영상이 사라지고, duration을 가져올 수 있는 load 메소드는 비동기였기 때문이죠...
  • 심지어 앞에서 3초 이상 영상을 필터링한다고해도 뒤에 사용되는 UIViewEditorViewController에서 맥시멈 길이만 제한할 수 있어서 어차피 소용이 없더군요.. 그래서 우선 영상 길이에 따라 다음 버튼을 활성화, 비활성화되게 해두었습니다
  • Toast PR이 머지되면 영상 길이가 너무 짧다는 토스트를 띄울 생각입니다.

📌 변경 사항

  • LoopingViewPlayer bound 조정
📸 ScreenShot
RPReplay_Final1701333770.MP4

Linked Issue

close #115

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.

Edit에서 고민 많이 하신 흔적이 보입니다 ㅜㅜ 고생하셨습니다.

iOS/Layover/Layover/Workers/VideoFileWorker.swift Outdated Show resolved Hide resolved
Comment on lines +106 to +109
@objc private func soundButtonDidTap() {
loopingPlayerView.player?.isMuted.toggle()
soundButton.isSelected.toggle()
}
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
Member Author

Choose a reason for hiding this comment

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

..까먹음;; 당장 구현하겠읍니다!!!

Copy link
Member Author

@anyukyung anyukyung Nov 30, 2023

Choose a reason for hiding this comment

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

비디오에서 소리를 제거하는 작업이 파일 자체를 건드려야하는건데, 버튼으로는 계속 껐다켰다할수있잖아요
껐다켰다할때마다, 혹은 업로드 화면으로 넘길때마다 파일 다시만들어서 asset에서 videotrack만 뽑는 작업 하는건 너무 비효율적이니까,
업로드 화면으로 넘어갈때 mute 유무 넘겨주고, 업로드 버튼 누를때 저 작업 해주는게 나을 것 같습니다!
이러한 이유로 audio 제거는 업로드 pr에서 구현하겠습니다ㅏ 😊

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.

MZ한 코드네요 좋습니다.

@anyukyung anyukyung merged commit f3fa7f7 into iOS/dev Nov 30, 2023
1 check passed
@anyukyung anyukyung deleted the iOS/feat#115 branch November 30, 2023 17:21
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