ラボのセットアップに 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);
}
if(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());
ネットワークからビデオを開始すると、2 つまたは 3 つのフレームが表示され、エラーが発生します。私の 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 なしで実行すると。それは正常に動作します。正確にどこが間違っているのかについての考え。
ベストヤッシュ