Toybrick

RK3399Pro入门教程(10)RTSP推流介绍

hisping

管理员

积分
617
楼主
发表于 2019-9-29 11:50:54    查看: 88966|回复: 51 | [复制链接]    打印 | 显示全部楼层


本教程讲解如何基于TB-RK3399proD开发板进行RTSP推流,并可在远程使用vlc进行播放

本教程demo为教学用例,进行3小时拷机测试正常,若用户想商用还需自行优化;用户也可以使用其他推流框架配合rockchip mpp编解码库进行RTSP推流



开发板:TB-RK3399proD

系统、固件:采用fedora28系统(固件v1.5测试通过),Debian10测试通过

推流框架:live555

编解码库:rockchip mpp编解码库

图像数据:usb摄像头



1. 环境安装

fedora28系统
  1. sudo dnf install https://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm
  2. sudo dnf install live555-devel
  3. sudo dnf install ffmpeg-devel

  4. sudo dnf install librockchip_mpp-devel
  5. sudo dnf install librockchip_rga-devel
复制代码

Debian10系统
  1. 第一次更新:
  2. 1. 更新源:sudo apt update --fix-missing
  3. 2. 升级软件包:sudo apt -y upgrade
  4. 注意:升级过去中会有提示确认是否提供/etc/apt/sources.list.d/toybrick.list,请输入"Y"
  5. 3. 再次更新源:sudo apt update

  6. 后续更新:
  7. sudo apt update
  8. sudo apt upgrade

  9. 安装依赖:
  10. sudo apt install liblivemedia-dev
  11. sudo apt install livemedia-utils
  12. sudo apt install ffmpeg
  13. sudo apt install libavcodec-dev
  14. sudo apt install libswscale-dev
  15. sudo apt install libavformat-dev
  16. sudo apt install vlc
  17. sudo apt install rockchip-mpp-dev
  18. sudo apt install rockchip-rga-dev
复制代码


2.下载并解压附件 for fedora
for debian

3. 编译执行

  1. cd IPCamera/
  2. make clean
  3. make
  4. ./RTSPServer
复制代码
运行时会打印URL地址,ip不固定,所以以实际打印为准,我这里是"rtsp://172.16.9.3:8554/h264ESVideoTest",后续播放就使用该地址


4.使用vlc进行播放,我这里直接在板子上安装vlc,用户也可以在PC上使用vlc播放
  1. sudo dnf install vlc
  2. vlc
复制代码

"media"--"Open Network Stream"--"rtsp://172.16.9.3:8554/h264ESVideoTest"--"Play"


运行效果如下




代码分析

V4L2.cpp

  1. void V4L2FramedSource::doGetNextFrame()
  2. {
  3.         long bigin = get_time();

  4.           registerOutputInterest();

  5.           while(fTotOfFrameToSend<fMaxOfFrameToSend)
  6.           {
  7.                     convernt_to_OutputBuffer();
  8.           }
  9.         long end = get_time();
  10.         printf("V4L2FramedSource::doGetNextFrame use %d \n", end - bigin);
  11.           //统计返回信息
  12.           fFrameSize=fNumValidDataBytes;//一次一帧图像
  13.          fNumTruncatedBytes = 0;

  14.           reset();
  15.         afterGetting(this);
  16. }
复制代码
从usb摄像头获取一帧数据,转化成NV12格式


StreamEncoder.cpp

  1. void StreamEncoder::continueReadProcessing1(unsigned frameSize,unsigned numTruncatedBytes,
  2.                                           struct timeval presentationTime,
  3.                                           unsigned durationInMicroseconds){

  4.           fNumTruncatedBytes = numTruncatedBytes;
  5.           fPresentationTime = presentationTime;
  6.           fDurationInMicroseconds = durationInMicroseconds;

  7.           encoder_to_h264();

  8.               if(fNumValidDataBytes+dstsize<fOutputBufferSize && fTotOfFrameToSend<fMaxOfFrameToSend)
  9.               {
  10.                 copy_to_outputbuffer();               
  11.               }

  12.         fFrameSize = fNumValidDataBytes;
  13.         gettimeofday(&fPresentationTime, NULL);
  14.         reset();
  15.               FramedSource::afterGetting(this);         
  16. }
复制代码
使用rockchip mpp库进行h264编码




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

hisping

管理员

积分
617
沙发
 楼主| 发表于 2020-3-11 18:02:35 | 显示全部楼层
cr7jj 发表于 2020-3-10 10:40
我在TB-RK3399ProD,Debian10系统 ,usb镜头
用你们的示例代码
现在编译通过,用vlc不能播放。出现以下错 ...

新增IPCamera-debian.zip附件,你再试试
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

产品中心 购买渠道 开源社区 Wiki教程 资料下载 关于Toybrick


快速回复 返回顶部 返回列表