2012-11-07 3 views
11

나는 죽음을 맞이하기 전에 사용자가 오디오 파일을 자동으로 다운로드하는 데 드는 엄청난 비용에 대한 Apple의 우려로 인해 현재 작동하지 않는다는 것을 알고 있습니다. 웹을 손상 시키려고하는 것과는 아무 관련이 없습니다 앱은 30 %를 얻지 못하기 때문에).자동 재생 오디오 on mobile safari

그러나 내 질문은 : 누군가 아직 교활한 해결 방법을 찾았습니까? 난 단지 게임을 시작할 때 소리를 내고 싶다. 현재 오디오를 재생하기 전에 사용자가 어딘가를 클릭 할 때까지 기다려야한다. 너는 영리한 녀석 중 한 명이 지금까지이 일을해야 할 것 같은가?

+1

몇 주 전에 비슷한 일을하고 싶었고 검색 결과가 도움이되지 못했습니다. – boz

+0

나는이 문제를 닥칠 때 봤는데 유용하지 않다. 제발 Stackoverflow, 당신은 내 유일한 희망은 ... –

+0

'AudioContext'를 사용하여 파이어 폭스와 크롬에 대한 해결책을 얻었지만, 사파리를 사용하지 않았다면 시도하지 않았다. 비슷한 질문에 대한 내 대답을 참조하십시오. https://stackoverflow.com/a/46485784/2342518 [@boz가 지금부터 무의미한 검색을 한 것은 마지막이 되었으면합니다.] – Xenos

답변

6

모바일 브라우저에서 자동 재생을 사용할 수있는 기회가 없습니다. Android 및 iOS에서는 허용하지 않으며 개인적으로는 실현 가능성이 있다고 생각합니다. 처음 시작할 때 웹 사이트를 두 번 상상해보십시오.

그러나 사용자가 자신이 현재 응용 프로그램의 오디오를 시작 발언하지 않도록 당신이 조금 해킹을 할 수 있습니다 :

  1. 당신은 당신의 오디오를 시작하는 사용자 상호 작용이 필요합니다. 따라서 앱이나 게임에 시작 화면이나 시작 버튼이있어 메인 메뉴로 이동하거나 게임을 시작하려면 클릭이 필요합니다. 해당 클릭 이벤트에 바인딩하고 <audio>에 대한 load() 메소드를 호출하십시오.

  2. <audio>의 "canplaythrough"이벤트에 바인딩하십시오. 이 이벤트는 소스를 재생할 준비가되면 트리거됩니다. 이제 play(), pause()를 호출하거나 다른 상호 작용을 기다릴 수 있습니다. 따라서 오디오는 준비되었지만 이제는 사운드를 시작하거나 중지 할 때 모든 것을 제어 할 수 있습니다.

  3. 또한 모바일 클라이언트에서 오디오 스프라이트를 사용하는 것이 좋습니다. iOS (및 Android?)는 내부적으로 싱글 톤을 통해 오디오 지원을 구현했습니다. 즉, 데스크톱 브라우저처럼 10 개의 오디오 요소를 가지고 한 번에 여러 가지 사운드를 재생할 수 없습니다. 하나의 파일 만 재생할 수 있습니다! 다른 소리의 소스를 변경하는 데 많은 시간이 걸립니다. 오디오 스프라이트를 사용하면 사용자가 처음 웹 사이트 또는 게임과 상호 작용할 때 스프라이트를 시작할 수 있습니다. 스프라이트를 일시 중지하고 사운드를 재생해야하는 경우 currentTime을 스프라이트의 시작 부분으로 설정하고 파일의 currentTime이 스프라이트의 끝에 도달 할 때 스프라이트를 일시 정지해야합니다. Sprite의 currentTime을 확인할 수있는 timeupdate 이벤트가 있습니다.

당신은 내가 당신을 위해 내 자바 스크립트 오디오 스프라이트 플레이어를 준비 할 수 있습니다 더 관심이 있다면 !

+0

유감스럽게도 저희 게임은 추가 사용자 상호 작용없이 시작되어야하므로 '해킹'이 작동하지 않습니다. 이미 오디오 스프라이트를 사용하고 있습니다. 그게 잘 작동합니다 (주로!). 지금 다른 해결책이없는 것 같아서 당신에게 맞는 답을 줄 것입니다 ... –

+0

'AudioContext'를 사용할 기회가 있습니다; 내 대답 https://stackoverflow.com을 참조하십시오./a/46485784/2342518 – Xenos

+0

사용자가 버튼을 클릭 할 때 여러 오디오 요소를로드 할 수 있는지 알고 계십니까? –

2

내가 지금까지 본 해결책은 셸 응용 프로그램을 만들고 UIWebView 안에 웹 응용 프로그램을 넣는 것뿐입니다.

http://flowz.com/2011/03/apple-disabled-audiovideo-playback-in-html5/

나는 또한 정말 평범한 된 웹 응용 프로그램에서이 작업을 수행하는 방법을 알고 싶습니다
UIWebView.allowsInlineMediaPlayback = YES; 
UIWebView.mediaPlaybackRequiresUserAction = NO; 

.

+0

불행히도 현재 포트폴리오의 HTML5 버전을 만드는 우리 전체의 요점은 장치에 무관심해야한다는 것입니다. UIWebView에 배치하는 것은 iOS 전용을 의미합니다 :-( 답변을 주셔서 감사합니다 ... –

0

나는 내 자신의 앱을 위해 이것을 해결했다고 믿는다.

단계,

컨트롤러로드까지, 그리고

....viewDidLoad에서

웹보기에서 HTML을로드하도록합니다. loadHTMLString : htmlFile baseURL : [self getBasePath]];

다음 ... webview에서 mediaPlaybackRequiresUserAction = NO로 설정하십시오.

너무 빨리 설정하면 html에 대한로드가이를 다시 설정한다고 생각합니다.