我用RTSP 采集h264的视频流数据,然后转给RTMP,rtmp推给斗鱼播放
我在rtsp采集端和发送给rtmp之前都查看了当时的视频文件是正常的;在rtmp接受到之后也是正常的。为什么斗鱼就不能播放我的视频流呢
这是rtmp接受和发出端的代码
FILE* fpSave0;
FILE* fpSave1;
fpSave0 = fopen("geth264_0.h264", "ab");
fpSave1 = fopen("geth264_1.h264", "ab");
while(1)
{
if(video_handle != NULL)
{
buf_temp = sdk_stream_ReadOneFrame((ST_HDL)video_handle);
if(buf_temp == NULL)
{
usleep(10*1000);
continue;
}
h = (frame_head_t *)buf_temp;
fwrite(buf_temp + sizeof(frame_head_t), 1, h->frame_size,fpSave0);
memset(put_framer_buffer,0x0,nframerBufLen);
if((h->frame_size + sizeof(frame_head_t)) > nframerBufLen)
{
printf("framer size %d > buf size:%d,gave up\n",h->frame_size + sizeof(frame_head_t),nframerBufLen);
continue;
}
memcpy(put_framer_buffer,buf_temp,h->frame_size + sizeof(frame_head_t));
h = (frame_head_t *)put_framer_buffer;
fwrite(put_framer_buffer + sizeof(frame_head_t), 1, h->frame_size,fpSave1);
if(h->frame_type == STREAM_I_FRAME_TYPE)
{
ret = RTMP264_Send(put_framer_buffer + sizeof(frame_head_t), h->frame_size, h->pts, 1);
}
else
{
ret = RTMP264_Send(put_framer_buffer + sizeof(frame_head_t), h->frame_size, h->pts, 0);
}
}
}
close(fpSave0);
close(fpSave1);
}
这是rtsp发出之前的代码
if(frame_data[ch].frame_buf_index > 0)
{
frame_tmp.frame_no = VFrameNum1 ++;
frame_tmp.frame_size = frame_data[ch].frame_buf_index;
frame_tmp.pts = pts;
frame_tmp.sec = tv.tv_sec;
frame_tmp.usec = tv.tv_usec;
frame_tmp.frame_type = last_frame_type;
// write packet to file here
if(frame_tmp.frame_type == STREAM_I_FRAME_TYPE)
printf("buf[0-4] = %x .%x .%x .%x .%x\r\n",frame_data[ch].frame_buf[0],frame_data[ch].frame_buf[1],frame_data[ch].frame_buf[2],\
frame_data[ch].frame_buf[3],frame_data[ch].frame_buf[4]);
fwrite(frame_data[ch].frame_buf, 1, frame_data[ch].frame_buf_index,fpSave);
for (int k = 0; k < sizeof(frame_tmp); k++)
printf("%02x ", ((char*)&frame_tmp)[k]);
printf("\r\n\r\n");
sdk_stream_WriteOneFrameEx(0, 0, &frame_tmp, frame_data[ch].frame_buf);
//rtsp_get_video_stream(frame_data[ch].frame_buf, frame_data[ch].frame_buf_index, pts);
}
last_frame_type = cur_frame_type;
frame_data[ch].frame_buf_index = 0;
}
if(len > 0)
{
memcpy(&frame_data[ch].frame_buf[frame_data[ch].frame_buf_index], buf, len);
frame_data[ch].frame_buf_index+=len;
}
发出给斗鱼之前视频流都是可以正常打开的。发给斗鱼之后就不行了,但是我用mpp拉流,推流给rtmp,再转给斗鱼就可以。此时rtmp用的是相同的库