项目简介
本项目就是RtmpApp嵌入式版本,在此基础上,融入之前的v4l2采集、ipu转码等内容,实现了usb摄像头的采集(yuv422)、ipu或者软件转码、x264编码、rtmp传输。
与前一个项目最大的不同在于数据衔接,以及数据转换,这里使用单独线程进行编码传输,里面涉及友元类的使用,是如下
void PushStream::worker(const CapFbTest &ct){
while(runflag){
lastTime=RTMP_GetTime();
if(frameIndex!=0){
timeval begintime,endtime;
gettimeofday(&begintime, NULL);
RTMP_SendScreenCapture((char*)buffer,height,tick);
gettimeofday(&endtime, NULL);
double timeuse = 1000000*(endtime.tv_sec - begintime.tv_sec)+endtime.tv_usec-begintime.tv_usec;
timeuse /=1000;
printf("frame index %d time use %lf ms\n",frameIndex,timeuse);
}
switch(src_pix_fmt){
case AV_PIX_FMT_YUV420P:
//memcpy(buffer,ct.yuv420Frame,baseFrameSzie*3/2);
buffer=(char *)ct.yuv420Frame;
break;
case AV_PIX_FMT_YUV422P:
memcpy(buffer,ct.yuvFrame,baseFrameSzie*2);
break;
case AV_PIX_FMT_RGB24:
memcpy(buffer,ct.rgbFrame,baseFrameSzie*3);
break;
default:
printf("Not supports this format \n");
break;
}
tick +=tick_gap;
nowTime=RTMP_GetTime();
sleepTime=tick_gap-nowTime+lastTime;
printf("tick_gap %d nowTime %d lastTime %d sleep time %d\n",tick_gap,nowTime,lastTime,sleepTime);
if(sleepTime>0)
usleep(sleepTime*1000);
frameIndex++;
}
}
完整工程
https://github.com/tla001/arm-rtmp
转载请注明出处:http://www.cnblogs.com/tla001/
一起学习,一起进步