Audio/video stream recording forums (http://stream-recorder.com/forum/index.php)
-   rtmpdump (http://stream-recorder.com/forum/forumdisplay.php?f=54)
-   -  

librtmp RTMP_Read is block, can unblock

(http://stream-recorder.com/forum/showthread.php?t=16235)

tigershi2000 04-24-2013 12:31 AM

librtmp RTMP_Read is block, can unblock


 
debug librtmp:

RTMP_Read-->Read_1_Packet-->RTMP_GetNextMediaPacket
while (!bHasMediaPacket && RTMP_IsConnected(r)
&& RTMP_ReadPacket(r, packet))
{
...
bHasMediaPacket = RTMP_ClientPacket(r, packet);


if (!bHasMediaPacket)
{
RTMPPacket_Free(packet);
}

...
}

there are be block。

can use callback do noblock:


rtmp.h:

typedef struct AVIOInterruptCB {
int (*callback)(void*);
void *opaque;
} AVIOInterruptCB;

typedef struct RTMP
{
...
AVIOInterruptCB interrupt_callback;
...
}

RTMP_Init:
{..
r->interrupt_callback.opaque = NULL;
r->interrupt_callback.callback = NULL;
}



outside use librtmp:
static int decode_interrupt_cb(void *ctx)
{
MYClass *is = (MYClass *)ctx;
return is->abort_request;
}

RTMP* r;
RTMP_Init(r);
r->interrupt_callback.callback = decode_interrupt_cb;
r->interrupt_callback.opaque = this;


if abort_request is true, RTMP_GetNextMediaPacket() break, RTMP_Read is break, can safe exit my application.



I hope it can help you。

gorilla.maguila 04-24-2013 08:44 AM

Re: librtmp RTMP_Read is block, can unblock


 
Me not understand and why are u mixing aviointerrupt with librtmp. Aviointerrupt makes sense handling callbacks on ffmpeg blocking functions like avformat_find_stream_info not in librtmp


All times are GMT -6. The time now is 03:47 PM.