实战小项目之基于嵌入式的视频直播客户端
Posted 悠悠南山下
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了实战小项目之基于嵌入式的视频直播客户端相关的知识,希望对你有一定的参考价值。
项目简介
本项目就是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
以上是关于实战小项目之基于嵌入式的视频直播客户端的主要内容,如果未能解决你的问题,请参考以下文章
韦东山嵌入式Linux视频教程_3期项目实战之ALSA声卡_从零编写之参数设置(基于优龙FS2410开发板,UDA1341声卡)
韦东山嵌入式Linux视频教程_3期项目实战之ALSA声卡_从零编写之数据传输(基于优龙FS2410开发板,UDA1341声卡)