首页 > 代码库 > 实战小项目之基于嵌入式的视频直播客户端
实战小项目之基于嵌入式的视频直播客户端
项目简介
本项目就是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
实战小项目之基于嵌入式的视频直播客户端
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。