Проблема с публикацией потока rtmp в FMS с помощью librtmp - PullRequest
1 голос
/ 22 июля 2011

Я пытаюсь получить видео с веб-камеры и закодировать его, а затем опубликовать поток в FMS.и теперь у меня возникла проблема, когда я пытаюсь опубликовать RTMP-поток в FMS с помощью librtmp.
Мой код:

char uri[]="rtmp://127.0.0.1/live/bolton";
r= RTMP_Alloc();
RTMP_Init(r);   
RTMP_SetupURL(r, (char*)uri);
r->Link.lFlags |= RTMP_LF_LIVE;
r->Link.lFlags |= RTMP_LF_BUFX;
RTMP_EnableWrite(r);
//RTMP_SetBufferMS(r, bufferTime);
RTMP_Connect(r, NULL);
RTMP_ConnectStream(r,0);

И журнал:

DEBUG: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DEBUG: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DEBUG: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DEBUG: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DEBUG: HandShake: Handshaking finished....
DEBUG: RTMP_Connect1, handshaked
DEBUG2: RTMP_SendPacket: fd=768, size=85
DEBUG2:   0000:  03 00 00 00 00 00 55 14  00 00 00 00               ......U.....      
DEBUG2:   0000:  02 00 07 63 6f 6e 6e 65  63 74 00 3f f0 00 00 00   ...connect.?....  
DEBUG2:   0010:  00 00 00 03 00 03 61 70  70 02 00 04 6c 69 76 65   ......app...live  
DEBUG2:   0020:  00 04 74 79 70 65 02 00  0a 6e 6f 6e 70 72 69 76   ..type...nonpriv  
DEBUG2:   0030:  61 74 65 00 05 74 63 55  72 6c 02 00 15 72 74 6d   ate..tcUrl...rtm  
DEBUG2:   0040:  70 3a 2f 2f 31 32 37 2e  30 2e 30 2e 31 2f 6c 69   p://127.0.0.1/li  
DEBUG2:   0050:  76 65 00 00 09                                     ve...             
DEBUG: Invoking connect
DEBUG2: RTMP_ReadPacket: fd=768
ERROR: RTMP_ReadPacket, failed to read RTMP packet header
DEBUG2: RTMP_SendPacket: fd=-1, size=307

Кажетсячто RTMP_connect подключен правильно, но не работает в функции RTMP_ConnectStream, я не знаком с последовательностью подключения rtmp, и это убивает меня.

Что я должен сделать, чтобы найти проблемы, Большое спасибо!

Ответы [ 2 ]

1 голос
/ 14 сентября 2011

Я имею дело с той же проблемой, но использую librtmp с ffmpeg. Если вы посмотрите в функцию RTMP_ReadPacket (), вы увидите, что выдается ошибка при попытке прочитать заголовок пакета с помощью метода ReadN ():

int
RTMP_ReadPacket(RTMP *r, RTMPPacket *packet)
{
    uint8_t hbuf[RTMP_MAX_HEADER_SIZE] = { 0 };
    char *header = (char *)hbuf;
    int nSize, hSize, nToRead, nChunk;
    int didAlloc = FALSE;

    RTMP_Log(RTMP_LOGDEBUG2, "%s: fd=%d", __FUNCTION__, r->m_sb.sb_socket);

    if (ReadN(r, (char *)hbuf, 1) == 0)
    {
        RTMP_Log(RTMP_LOGERROR, "%s, failed to read RTMP packet header", __FUNCTION__);
        return FALSE;
    }

Эта ошибка выдается только в том случае, если ReadN возвращает 0. Я со своей стороны еще не выяснил, почему это происходит.

0 голосов
/ 15 января 2014

У меня такая же проблема в Visual studio.Оказалось, что в режиме отладки librtmp установил некоторое значение рукопожатия 0 вместо генерации случайных данных.

//handshake.h
  /* generate random data */
#ifdef _DEBUG
  memset(serversig+8, 0, RTMP_SIG_SIZE-8);
#else
  ip = (int32_t *)(serversig+8);
  for (i = 2; i < RTMP_SIG_SIZE/4; i++)
    *ip++ = rand();
#endif

Просто убедитесь, что генерировали случайные данные.

...