작성
·
445
·
수정됨
0
iOS 에서 직접 개발할때는, 영상 고르면 바로 플레이 가능했는데. 해당 프로젝트에서 영상을 고르면 한동안 압축을 하고 있어서요. 영상이 길어질수록 오래 걸리던데, 추가로 화질도 떨어집니다. 상용앱에선 사용하기 힘들어 보여서요.
안드로이드에서 영상선택하면, 압축과정이 없는데
iOS 에서 혹시 해당 이슈 해결할 방법이 있을까요 ?
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
코드팩토리 디스코드
https://bit.ly/3HzRzUM
Flutter 강의를 구매하시면 코드팩토리 디스코드 서버 플러터 프리미엄 채널에 들어오실 수 있습니다! 디스코드 서버에 들어오시고 저에게 메세지로 강의를 구매하신 이메일을 보내주시면 프리미엄 채널에 등록해드려요! 프리미엄 채널에 들어오시면 모든 질의응답 최우선으로 답변해드립니다!
답변 3
0
말씀해주신 images_picker 로 테스트 해봤습니다.
1. android 에서 빌드시 deprecated api 뜨고
위에처럼 시뮬레이터에서 권한이 없다고 나오네요.
해당 라이브러리 마지막 업데이트가 1년 7개월 전이라.
가이드 대로 해봐도 정상작동 안합니다.
2. ios 에서는 파일경로 받아서 넘기면 저렇게 흰화면으로 나옵니다. 저 상태에서 화면 탭해서 컨트롤 버튼 띠우면 그제야 영상 이미지가 보입니다.
---
추가적으로
기존 vid_player 프로젝트 버그를 찾았는데요.
플레이중에 우측위 신규영상 버튼 누르면 팝업창 올라오면서
현재보고 있던 영상이 일시정지 됩니다. 이상태에서
팝업창 안에 다른 영상 고르면, 창이 닫히고, 선택한 영상이 화면위에 뜨지만, 뒤에서 일시정지 했던
영상이 플레이 되서 소리가 들립니다. 여러번 반복하면 영상 여러개 그대로 플레이 소리가 들립니다. 영상 긴거로 테스트 해보시면 첫 영상 플레이 끊나기 전까지 계속 플레이 됩니다.
아마 백단에서 플레이중엔 사라지지 않고 계속 누적되는듯합니다. 그래서
// VideoPlayerController 초기화 initializeController() 호출
@override
void initState() {
// TODO: implement initState
super.initState();
initializeController();
}
//VideoPlayerController 는 file 경로가 바뀌면 다시 해줘야 한다.
//그래서 stateful 위젯이라 initState() 이후에는 didUpdateWidget() 을 통해
//VideoPlayerController 를 초기화 한다.
@override
void didUpdateWidget(covariant CustomVideoPlayer oldWidget) {
// TODO: implement didUpdateWidget
super.didUpdateWidget(oldWidget);
if (oldWidget.video.path != widget.video.path) {
_videoController!.dispose();
initializeController();
}
}
@override
void dispose() {
// TODO: implement dispose
_videoController!.dispose();
super.dispose();
}
dispose() 추가하니 증상이 사라졌습니다.
0
네 확인해 본 결과
image_picker 통해 영상 선택하면
파일 변환한후, 그 변환한 파일경로를 리턴해 주네요.
iOS 시뮬레이터에 아이폰으로 찍은,
mp4 4k hevc hdr 영상을 집어 넣고
플러터앱에서 동영상 선택후 리턴된 영상파일 경로로 가보면
mov 720p h264 파일로 나옵니다.
즉 압축프로세스를 거친(리사이징된) 파일경로를 던져줍니다.
실무에선 사용하기 힘들듯 합니다.
같은이슈로 2018년 압축 여부 옵션기능 넣어달라고 요청했는데 현재까지 딱히 해결되지 않았습니다.
https://github.com/flutter/flutter/issues/24954
0
안녕하세요!
현재 공식 플러그인으로는 ios에서 compress 없이 영상을 픽 할 수 있는 방법이 없는걸로 보입니다. 해당 이슈 링크 해드립니다.
https://github.com/flutter/flutter/issues/24954
하지만 아래 플러그인은 압축 정도를 직접 명시 할 수 있어서 말씀하시는 용도로 조금 더 유용 할 수 있을 것 같습니다.
https://pub.dev/packages/images_picker
추가로, compress를 진행하는건 ImagePicker 입니다. ImagePicker에서 저희는 path 값만 가져오고 영상 재생은 오리지날 영상으로 부터 소스를 가져옵니다 (코드 확인 부탁드립니다). 그러니 영상 품질은 낮아지면 안될 것 같은데 확인 한번 부탁드립니다 (저는 육안으로 구분이 잘 안되네요).
감사합니다!
안녕하세요. 일단 메모리 누수 부분은 맞습니다. 이전에도 질문 주신분들이 많았는데 다들 비슷하게 해결하셨고 어떤식으로 해결헤도 크게 문제 되지 않습니다. dispose() 만 잘해주면 되는게 포인트입니다. 영상의 경우 니즈에 안맞는다면 다른 플러그인을 찾아보시거나 플러터 팀 이슈를 트래킹 해보셔야 할 것 같습니다.