AVPlayer로 동영상 재생 중 간헐적으로 (특히 plus 기기에서) 동영상 소리만 들리고 화면은 나오지 않는 현상이 재현되었다.


이 현상을 수정하기 위해 기존 개발자가 개발한 코드에서 동영상 로딩 하는 부분을 50% 이상 뜯어 고쳐 아주 기본적인 로직으로만 동영상 재생이 되도록 수정하였으나 마찬가지로 동영상 화면이 간헐적으로 나오지 않는 현상은 고쳐지지 않았다.


그렇게 2주 가까이 다른 버그 수정과 기능 구현을 하는 틈틈히 구글링을 한 결과 다음과 같은 질답을 발견하였고, 답변에 있는데로 구현 후 현재까지 아주 잘 되고 있다.


2주 가까이 해결하지 못하고 있던것을 해결하니 기분이 참 좋다 ㅎㅎㅎ




출처: https://forums.developer.apple.com/thread/27589



Hello all.

 

I got the same problem with my implementation. After trying the solutions proposed here, I think I finally found the relable way to do things

 

The AVPlayerItemVideoOutput must be created AFTER the AVPlayerItem status is ready to play.

So

  1. Create player & player item, dispatch queue and display link
  2. Register observer for AVPlayerItem status key
  3. On status AVPlayerStatusReadyToPlay, create AVPlayerItemVideoOutput and start display link

 

Thanks to all for the inspiration

Renaud


- 대상 단말에 설치하려는 app의 Provisioning Profile이 저장되어있어야 한다.

- http로 접근 가능한 위치여야 한다. (포트 포워딩을 이용한 개발 서버 등)

- Xcode 5.1.1 기준임.


출처 : http://aaronparecki.com/articles/2011/01/21/1/how-to-distribute-your-ios-apps-over-the-air


1. Xcode에서 빌드 타겟을 IOS Device로 변경


2. 메뉴의 Product-Archive를 선택

2-1. Archive가 끝나면 자동으로 Organizer창이 표시되고, Archives에 지금 빌드한 app이 추가되어 있다.


3. app을 선택 후 "Distribute..."버튼을 클릭한다.

3-1. "Save for Enterprise or Ad Hoc Deployment" 를 선택 후 "Next" 클릭

3-2. Provisioning Profile 선택 후 "Export" 클릭

3-3. 저장위치 설정 창에서 하단의 "Save for Enterprise Distribution"을 체크하면 ipa가 있는 URL과 타이틀을 지정하게 되어 있다.


4. "Save" 를 클릭하면 ipa파일과 plist파일이 생성되는데, 저장 시 입력한 URL로 접근 가능한 위치에 복사한다.


5. 다음과 같은 HTML파일을 생성한다.

<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" /> <title>Install Geoloqi</title> <style type="text/css"> body { background: url(bkg.png) repeat #c5ccd4; font-family: Helvetica, arial, sans-serif; } .congrats { font-size: 16pt; padding: 6px; text-align: center; } .step { background: white; border: 1px #ccc solid; border-radius: 14px; padding: 4px 10px; margin: 10px 0; } .instructions { font-size: 10pt; } .arrow { font-size: 15pt; } table { width: 100%; } </style> </head> <body> <div class="congrats">Congrats! You've been invited to the beta of Geoloqi.</div> <div class="step"> <table><tr> <td class="instructions">Install the<br />Geoloqi app</td> <td width="24" class="arrow">&rarr;</td> <td width="57" class="imagelink"> <a href="itms-services://?action=download-manifest&url=http://loqi.me/app/Geoloqi.plist"> <img src="geoloqi-icon.png" height="57" width="57" /> </a> </td> </tr></table> </div> </body> </html>



1. 아이폰을 Mac에 연결

2. UUID 확인

2.1. Xcode를 사용하여 확인

2.1.1. command-shift-2 (Organizer) 실행

2.1.2. 연결 된 아이폰의 Identifier 복사

2.2. Itunes를 사용하여 확인

2.2.1. Itunes 상단의 iPhone 클릭

2.2.2. iPhone 정보 섹션에서 일련번호 클릭 후 UUID 복사


3. 패킷 미러링 설정

rvictl -s {$UUID}


wireshark로 패킷 캡쳐. rvi0 or rvi1

LTE는 인터페이스 목록에 표시가 되지 않음


4. 패킷 미러링 종료

rvictl -x {$UUID}



기타.

- wireshark가 실행 중에는 패킷 미러링 설정이 안되는 경우도 있다.

- Mac OS의 버전이 10.5이상인 경우 x11이 포함되어 있지 않아 Xquarts를 설치해야 하고, wireShark 첫 실행 시 초기화에 오래 걸림

+ Recent posts