|
|
|
|
@ -244,14 +244,14 @@ static void media_process(void *arg) {
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if (viewer.stopping && viewer.id) media_close(&viewer, 5); |
|
|
|
|
if (viewer.handle) { |
|
|
|
|
int result = stream_media_get_status(viewer.handle, &viewer_status); |
|
|
|
|
if (result < 0) { DEBUG_ERROR(DEBUG_CATEGORY_STREAM, "Android media index failed result=%d", result); media_close(&viewer, 6); } |
|
|
|
|
} |
|
|
|
|
if (viewer.handle && (viewer.resync || viewer.rx_overflow)) { |
|
|
|
|
viewer.resync = viewer.rx_overflow = 0; viewer.position = -1; viewer.waiting = 0; |
|
|
|
|
if (stream_media_resync(viewer.handle) != STREAM_OK) media_close(&viewer, 6); |
|
|
|
|
} |
|
|
|
|
if (viewer.handle) { |
|
|
|
|
int result = stream_media_get_status(viewer.handle, &viewer_status); |
|
|
|
|
if (result < 0) { DEBUG_ERROR(DEBUG_CATEGORY_STREAM, "Android media index failed result=%d", result); media_close(&viewer, 6); } |
|
|
|
|
} |
|
|
|
|
unsigned queued_viewer = 0; |
|
|
|
|
for (struct media_record *r = output_queue.head; r; r = r->next) if (r->id == viewer.id) queued_viewer++; |
|
|
|
|
if (viewer.handle && viewer.want_read && queued_viewer < 2 |
|
|
|
|
@ -271,6 +271,7 @@ static void media_process(void *arg) {
|
|
|
|
|
else if (result == STREAM_GAP || result == STREAM_EXPIRED) { |
|
|
|
|
DEBUG_INFO(DEBUG_CATEGORY_STREAM, "Android playback resync id=%llu result=%d", (unsigned long long)viewer.id, result); |
|
|
|
|
stream_media_resync(viewer.handle); viewer.position = -1; media_output(viewer.id, 3, NULL, 0, 0, NULL, 0); |
|
|
|
|
memset(&viewer_status, 0, sizeof(viewer_status)); |
|
|
|
|
} else { DEBUG_ERROR(DEBUG_CATEGORY_STREAM, "Android playback read failed result=%d", result); media_close(&viewer, 6); } |
|
|
|
|
} |
|
|
|
|
if (publisher.handle && !stream_handle_active(publisher.handle)) media_close(&publisher, 6); |
|
|
|
|
@ -495,6 +496,7 @@ int android_stream_resync(uint64_t id) {
|
|
|
|
|
int result = -1; |
|
|
|
|
if (viewer.id == id && viewer.handle) { |
|
|
|
|
media_drop_output(); viewer.resync = viewer.want_read = 1; viewer.waiting = 0; viewer.position = -1; |
|
|
|
|
memset(&viewer_status, 0, sizeof(viewer_status)); |
|
|
|
|
result = media_schedule(); |
|
|
|
|
} |
|
|
|
|
pthread_mutex_unlock(&media_lock); return result; |
|
|
|
|
|