오디오 재생 제어 알림 바의 진행 상태가 업데이트되지 않는 문제 해결 방법

발행: (2026년 2월 27일 오후 04:46 GMT+9)
5 분 소요
원문: Dev.to

I’m ready to translate the article for you, but I’ll need the full text you’d like translated. Could you please paste the content (or the portion you want translated) here? I’ll keep the source line exactly as you provided and preserve all formatting, markdown, and code blocks.

문제 설명

  • 재생 상태를 설정한 후 알림 바의 진행 상황이 업데이트되지 않습니다.
  • 알림 바를 아래로 끌어내리면 정상적으로 업데이트됩니다.
  • 화면을 잠갔다가 다시 잠금 해제하면 정상적으로 업데이트됩니다.

배경 지식

  • AVSession Kit – 시스템이 제공하는 오디오 및 비디오 제어 서비스로, 시스템 내 모든 오디오 및 비디오 활동을 중앙에서 관리합니다.
  • Background Tasks Kit – 백그라운드 작업 관리. 앱이 백그라운드로 전환된 후에는 리소스가 엄격히 제어됩니다. 앱은 적절한 백그라운드 작업을 선택하여 지속적인 동작을 보장해야 합니다.
  • Media Session Provider – 오디오/비디오 애플리케이션이 미디어 세션 컨트롤러로부터 미디어 관련 정보를 제어하고, 컨트롤러가 발행하는 재생 제어 명령에 응답할 수 있도록 합니다.

문제 해결 절차

  • 장기 실행 작업 AUDIO_PLAYBACK이 적용되었는지 확인하십시오.
  • 리소스 기간, 재생 상태, 재생 위치, 속도 및 기타 정보가 올바르게 설정되었는지 확인하십시오. 방송 제어 센터는 이 데이터를 사용하여 진행 상황을 표시합니다.

Analysis Conclusion

방송 제어 센터에서 재생 상태를 초기화하는 과정에 오류가 발생하여 재생 진행률 계산이 실패했으며, 그 결과 진행 바가 업데이트되지 않았습니다. 상태 표시줄을 아래로 당기거나 화면을 잠그고 다시 풀면 시스템이 재계산을 수행하여 올바른 진행률을 표시합니다.

솔루션

1. 장시간 작업 신청하기

BackgroundTasks Kit을 사용하여 AUDIO_PLAYBACK 장시간 작업을 요청하면 앱이 Suspend 상태로 들어가는 것을 방지할 수 있습니다.

backgroundTaskManager.startBackgroundRunning(
  this.context,
  backgroundTaskManager.BackgroundMode.AUDIO_PLAYBACK,
  wantAgentObj
).then(() => {
  console.info("Operation startBackgroundRunning succeeded");
}).catch((error: BusinessError) => {
  console.error(`Operation startBackgroundRunning failed. code is ${error.code} message is ${error.message}`);
});

2. 재생 리소스를 올바르게 초기화하고 업데이트하기

AVSession의 재생 상태를 설정합니다. 시스템이 제공된 정보를 기반으로 진행률을 자동으로 계산하므로, 앱에서 실시간 진행률을 업데이트할 필요는 없습니다.

let playbackState: AVSessionManager.AVPlaybackState = {
  state: AVSessionManager.PlaybackState.PLAYBACK_STATE_PLAY,
  position: {
    elapsedTime: 1000,               // 시작 이후 경과된 밀리초
    updateTime: new Date().getTime() // 업데이트 시점의 타임스탬프
  },
  speed: 1.0,
  bufferedTime: 14000               // 버퍼링된 기간(밀리초)
};

session.setAVPlaybackState(playbackState, (err) => {
  if (err) {
    console.error(`Failed to set AVPlaybackState. Code: ${err.code}, message: ${err.message}`);
  } else {
    console.info(`SetAVPlaybackState successfully`);
  }
});

주의 사항

  • 재생 상태, 위치, 속도가 변경될 때만 AVPlaybackState를 업데이트하세요. 그렇지 않으면 시스템에서 계산 오류가 발생할 수 있습니다.
  • 재생이 시작될 때 초기 위치를 보고합니다. 미디어가 버퍼링 중이라면 먼저 상태를 AVSessionManager.PlaybackState.PLAYBACK_STATE_BUFFERING으로 설정하여 시스템에 진행률 표시줄을 새로 고치지 말라고 알려야 합니다.

검증 결과

시스템의 재생 제어 센터는 이제 재생 상태에 따라 진행 표시줄을 자동으로 계산하고 새로 고칩니다. 애플리케이션은 속도, 위치 또는 기타 관련 정보가 변경될 때만 상태를 업데이트하면 됩니다.

관련 문서 또는 링크

0 조회
Back to Blog

관련 글

더 보기 »