질문이 아주 간단하게 들리지만 트랙 URL이 정확한지 확인하는 방법을 찾지 못했습니다.libspotify : 트랙 uri에서 트랙을 재생하는 방법?
예를 들어, 통상의 절차는 소정의 유효한 트랙하여 트랙을 재생하는 URI 스포티 파이 : 트랙 : 5Z7ygHQo02SUrFmcgpwsKW이다 :
1) (CONST 숯 * $으로의 track_uri)
2 sp_link_create_from_string하여 * sp_link 얻을) (sp_link의 *)
3) sp_track_add_ref (sp_track *)
4) sp_track_error()가 SP_ERROR_OK, 또는 SP_ERROR_IS_LOADING을 반환하는 경우 만 metadata_updated 및
sp_link_as_track에 의해 sp_track * 수SP_ERROR_OK 다음 sp_session_player_load 및 sp_session_player_play를 사용하여 트랙을로드하고 재생하십시오.
5) sp_track_release() 및 sp_session_player_unload()가 트랙의 끝 부분에있을 때.
내가 SP_ERROR_IS_LOADING 반환) (올바른 URI sp_track_error 놀 수행하려고
,라는 결코 극복 metadata_updated, 물론이 hangs.I 프로그램은 많은 URI
을 확인하고 같은를 얻을 수 결과.
API를 놓치거나 잘못 이해 했습니까?
이 메인 루프는 다음과 같습니다
pthread_mutex_lock(&g_notify_mutex);
for(;;)
{
if (next_timeout == 0)
{
while(!g_notify_do && !g_playback_done)
{
pthread_cond_wait(&g_notify_cond, &g_notify_mutex);
}
}
else
{
struct timespec ts;
#if _POSIX_TIMERS > 0
clock_gettime(CLOCK_REALTIME, &ts);
#else
struct timeval tv;
gettimeofday(&tv, NULL);
TIMEVAL_TO_TIMESPEC(&tv, &ts);
#endif
printf("%d\n",next_timeout);
if((ts.tv_nsec+(next_timeout % 1000) * 1000000)>=1000000000)
{
ts.tv_nsec += (next_timeout % 1000) * 1000000-1000000000;
ts.tv_sec += next_timeout/1000+1;
}
else
{
ts.tv_sec += next_timeout/1000;
ts.tv_nsec += (next_timeout % 1000) * 1000000;
}
pthread_cond_timedwait(&g_notify_cond, &g_notify_mutex, &ts);
}
g_notify_do = 0;
pthread_mutex_unlock(&g_notify_mutex);
g_currenttrack= sp_link_as_track(sp_link_create_from_string(spotify:track:1NrJYpdAi7uosDRPmSYrsG));
sp_track_add_ref(g_currenttrack);
if (sp_track_error(g_currenttrack) == SP_ERROR_OK) {
sp_session_player_load(g_sess, g_currenttrack);
sp_session_player_play(g_sess, 1);
}
do
{
sp_session_process_events(g_sess, &next_timeout);
}
while (next_timeout == 0);
pthread_mutex_lock(&g_notify_mutex);
}
나는 메인 루프에 의해 호출이 metadata_update을 찾았지만, 트랙을 만든 경우,이 루프 (290s에 대한) 오랫동안 교제 할 것이다.
필요에 따라 이벤트 루프 호출 sp_session_process_events가 있습니까? – Weeble
물론. 위의 모든 동작이 반복됩니다. 맞습니까? –
맞아. sp_track에 대한 참조를 추가 한 후에도 sp_link를 릴리스 할 수는 있지만 릴리스해야한다고 생각합니다. 그러나 트랙 재생이 중단되어서는 안되며 리소스가 누출 될 수 있습니다. 4 단계를 따르기가 조금 어려웠습니다. 아마도 거기에 단어가 빠져있을 수 있습니까? 이 모든 일이 메인 루프와 관련하여 언제 발생하는지 명확히 할 수 있습니까? libspotify에서 콜백하는 동안이 함수를 호출합니까? 어떤 트랙 우르에서 작동하지만 다른 제품에서는 작동하지 않는다고 말하고 있습니까, 아니면 전혀 작동하지 않는다는 말입니까? – Weeble