|
@@ -305,7 +305,8 @@ int in_worktime(int start, int end) {
|
305
|
305
|
void * input_stream(void *self) {
|
306
|
306
|
INPUT *r = self;
|
307
|
307
|
INPUT_STREAM *s = &r->stream;
|
308
|
|
- char buf[FRAME_PACKET_SIZE];
|
|
308
|
+ char buffer[RTP_HEADER_SIZE + FRAME_PACKET_SIZE];
|
|
309
|
+ char *buf = buffer + RTP_HEADER_SIZE;
|
309
|
310
|
|
310
|
311
|
signal(SIGPIPE, SIG_IGN);
|
311
|
312
|
|
|
@@ -335,8 +336,9 @@ void * input_stream(void *self) {
|
335
|
336
|
goto RECONNECT;
|
336
|
337
|
|
337
|
338
|
channel_source sproto = get_sproto(r->channel->source);
|
|
339
|
+ int rtp = is_rtp(r->channel->source);
|
338
|
340
|
|
339
|
|
- if (mpeg_sync(r, sproto) != 0) {
|
|
341
|
+ if (!rtp && mpeg_sync(r, sproto) != 0) {
|
340
|
342
|
proxy_log(r, "Can't sync input MPEG TS");
|
341
|
343
|
sleep(2);
|
342
|
344
|
goto RECONNECT;
|
|
@@ -363,7 +365,13 @@ void * input_stream(void *self) {
|
363
|
365
|
if (sproto == tcp_sock) {
|
364
|
366
|
readen = fdread_ex(r->sock, buf, FRAME_PACKET_SIZE, TCP_READ_TIMEOUT, TCP_READ_RETRIES, 1);
|
365
|
367
|
} else {
|
366
|
|
- readen = fdread_ex(r->sock, buf, FRAME_PACKET_SIZE, UDP_READ_TIMEOUT, UDP_READ_RETRIES, 0);
|
|
368
|
+ if (!rtp) {
|
|
369
|
+ readen = fdread_ex(r->sock, buf, FRAME_PACKET_SIZE, UDP_READ_TIMEOUT, UDP_READ_RETRIES, 0);
|
|
370
|
+ } else {
|
|
371
|
+ readen = fdread_ex(r->sock, buffer, FRAME_PACKET_SIZE + RTP_HEADER_SIZE, UDP_READ_TIMEOUT, UDP_READ_RETRIES, 0);
|
|
372
|
+ if (readen > RTP_HEADER_SIZE)
|
|
373
|
+ readen -= RTP_HEADER_SIZE;
|
|
374
|
+ }
|
367
|
375
|
}
|
368
|
376
|
|
369
|
377
|
if (readen < 0)
|