2011-07-22 28 views
0

ウェブカメラからビデオを取得してエンコードし、そのストリームをFMSに公開しようとしています。 librtmpでFMSにRTMPストリームを公開しようとすると問題が発生します。
マイコード:rtmpストリームをlibrtmpでFMSに公開する際の問題

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でfailesは、私は、RTMP接続シーケンスに精通していないよ、それは殺しています私。

問題を見つけるにはどうすればよいですか、ありがとうございます!

答えて

1

私は同じ問題を扱っていますが、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

はい、私はまた、ここの問題に気付きました。私はよく分からないが、何が間違っているのか分かったと思います。この方法は、lib OpenSSLを、特にwin32のために構築された別のバージョンに置き換えるときに機能します。ありがとう、すべて同じ:) – Bolton

0

私はVisualスタジオで同じ問題が発生しました。 これは、デバッグモードでは、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 

ランダムなデータが生成されていることを確認してください。

関連する問題