实战小项目之基于嵌入式的视频直播客户端
项目简介
本项目就是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/
一起学习,一起进步