Toybrick

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

hisping

管理员

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


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

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



开发板:TB-RK3399proD

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

推流框架:live555

编解码库:rockchip mpp编解码库

图像数据:usb摄像头



1. 环境安装

  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
复制代码


2.下载并解压附件


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
回复

使用道具 举报

yuys

注册会员

积分
124
发表于 2019-10-17 15:22:38 | 显示全部楼层
在局域网里,在PC 端口,通过opencv获取板子上的推流,PC上显示非常容易出现卡死。
回复

使用道具 举报

hjf515

中级会员

积分
213
发表于 2019-10-26 16:11:11 | 显示全部楼层
非常不错,这个例子的关键应该是将相关开源库中的视频编码采用MPP中的硬件编码单元。
能否提供一个教程,介绍开源库 如何 适配rockchip MPP RGA等库。
回复

使用道具 举报

you_big_father

注册会员

积分
114
发表于 2019-12-8 15:35:25 | 显示全部楼层
你好,视频无法打开提示如下:
[root@localhost IPCamera]# ./RTSPServer

"h264ESVideoTest" stream, from the file "test.264"
Play this stream using the URL "rtsp://202.204.53.161:8554/h264ESVideoTest"

(We use port 80 for optional RTSP-over-HTTP tunneling.)

camera driver name is : uvcvideo
camera device name is : LRCP  USB2.0
camera bus information: usb-xhci-hcd.11.auto-1.4
Success in VIDIOC_S_FMT
Success in VIDIOC_G_FMT getSizeInfo()
fmt.fmt.pix.bytesperline:1280
format:YUYV
camera_width:640        ,camera_height:480
video_format:16  YUV 4:2:2

end open_camera
Success in VIDIOC_G_FMT getSizeInfo()
fmt.fmt.pix.bytesperline:1280
format:YUYV
camera_width:640        ,camera_height:480
video_format:16  YUV 4:2:2

end open_camera
creater
pictureSize=460800
SDP Info:a=fmtp:96 packetization-mode=1;profile-level-id=000000;sprop-parameter-sets=H264

__StreamEncoder::H264_encode_close__
closed the camera!

camera driver name is : uvcvideo
camera device name is : LRCP  USB2.0
camera bus information: usb-xhci-hcd.11.auto-1.4
Success in VIDIOC_S_FMT
Success in VIDIOC_G_FMT getSizeInfo()
fmt.fmt.pix.bytesperline:1280
format:YUYV
camera_width:640        ,camera_height:480
video_format:16  YUV 4:2:2

end open_camera
Success in VIDIOC_G_FMT getSizeInfo()
fmt.fmt.pix.bytesperline:1280
format:YUYV
camera_width:640        ,camera_height:480
video_format:16  YUV 4:2:2

end open_camera
creater
pictureSize=460800
__DD_H264VideoFileServerMediaSubsession::startStream__
StreamOn success!
Open file(/boot/toybrick-release) failed
rgaCreate error!

Open file(/boot/toybrick-release) failed
rgaCreate error!

Open file(/boot/toybrick-release) failed
rgaCreate error!

Open file(/boot/toybrick-release) failed
rgaCreate error!


回复

使用道具 举报

you_big_father

注册会员

积分
114
发表于 2019-12-8 16:36:40 | 显示全部楼层
you_big_father 发表于 2019-12-8 15:35
你好,视频无法打开提示如下:
[root@localhost IPCamera]# ./RTSPServer

我自己解决了,用直接安装的RGA会出问题,先到《RK3399Pro入门教程(5)图形加速引擎RGA的使用》里下载RGA源码,放到这个教程目录下,修改一下makefile就行了
回复

使用道具 举报

sjq_cyy

新手上路

积分
40
发表于 2019-12-9 15:58:20 | 显示全部楼层
我也遇到了同样的问题,

楼上能贴下是如何把rga的代码融合到这个工程里面的吗?
非常感谢

本帖子中包含更多资源

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

x
回复

使用道具 举报

you_big_father

注册会员

积分
114
发表于 2019-12-11 20:38:14 | 显示全部楼层
sjq_cyy 发表于 2019-12-9 15:58
我也遇到了同样的问题,

楼上能贴下是如何把rga的代码融合到这个工程里面的吗?

你好  我才看到你的问题。
就是将rga例程的“rockchip_rga”文件夹源码放到RTSP例程根目录下,头文件放到RTSP的include文件夹下,makefile文件里加上RGA源文件会生成的 .o 文件,再修改V4L2.H文件将“#include <rockchip/rockchip_rga.h>”的“rockchip/”去掉就行了。
回复

使用道具 举报

seanx

注册会员

积分
61
发表于 2019-12-18 14:38:06 | 显示全部楼层
今天也遇到了这个问题,最终发现是用dnf update更新了mpp、rga、drm几个库导致的,将这几个库降级到之前的版本就不会再报“Open file(/boot/toybrick-release) failed”了。
回复

使用道具 举报

xiayip

新手上路

积分
12
发表于 2019-12-26 18:06:18 | 显示全部楼层
看到介绍里说RK3399pro是支持AFBC的,那请问要如何启用这个技术呢?需要手动启用吗?还是说系统会自己决定何时启用?
回复

使用道具 举报

Carlos

新手上路

积分
48
发表于 2019-12-30 09:24:18 | 显示全部楼层
大佬,我想知道板子上是linux系统的话,操作步骤是怎样的
回复

使用道具 举报

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

本版积分规则

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


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