0

我正在为我的实验室设置使用 vlc 播放器。我在 vlc 的单独线程中运行以下代码。

做{

 ret = conManager->read(block);// basically calls the read system call 

 int rcvbuf=0;     /* Receive buffer size */
 socklen_t optlen; /* Option length */
 optlen = sizeof rcvbuf;
 int z = conManager->downloadQueue.front()->getConnection()->getsocket();
 if(z>0)
 {
 if (!(getsockopt(z,SOL_SOCKET,SO_RCVBUF, &rcvbuf,&optlen) ))
     printf(" The socket buffer size is  %d \n", rcvbuf);
 }
 if(rcvbuf!=0)
 {
    t_block=block_Alloc(rcvbuf);
    rec = conManager->recv(t_block);//recv call with MSG_PEEK option set 
    printf("Received bytes : %d \n",rec);
    block_Release(t_block);
 }

如果(ret>0){

    block_t *bufBlock = block_Alloc(ret);
    memcpy(bufBlock->p_buffer, block->p_buffer, ret);
    bufBlock->i_length = block->i_length;
    buffer->put(bufBlock);

}

} while(ret && !buffer->getEOF());

当我从网络启动视频时,它会显示两到三帧,然后会出现一些错误。我的 recv 调用是否修改了缓冲区中的数据?..

[h264 @ 0x7f2060cfa5a0] AVC: nal size -1870460177
[h264 @ 0x7f2060cfa5a0] AVC: nal size -1870460177
[h264 @ 0x7f2060cfa5a0] no frame!
[h264 @ 0x7f2060cfaa40] AVC: nal size -66001185
[h264 @ 0x7f2060cfaa40] AVC: nal size -66001185
[h264 @ 0x7f2060cfaa40] no frame!
[h264 @ 0x7f2060cfaee0] AVC: nal size -16048796

我检查了错误,但它说数据包被截断而不是在文件末尾。但是,如果我在没有 recv 的情况下运行。它工作正常。关于它到底哪里出错的任何想法。

最佳雅什

4

0 回答 0