之前在https://blog.csdn.net/fengbingchun/article/details/91355410中给出了通过LIVE555实现拉流的测试代码,这里通过FFmpeg来实现,代码量远小于LIVE555,实现模块在libavformat。

在4.0及以上版本中,FFmpeg有了些变动,好像不再推荐使用av_register_all、avformat_network_init、av_init_packet等函数。

FFmpeg拉流测试代码如下(test_ffmpeg_rtsp_client.cpp):

#include "funset.hpp"
#include <iostream>#ifdef __cplusplus
extern "C" {
#endif#include <libavformat/avformat.h>#ifdef __cplusplus
}
#endifint test_ffmpeg_rtsp_client()
{// Allocate an AVFormatContextAVFormatContext* format_ctx = avformat_alloc_context();// open rtsp: Open an input stream and read the header. The codecs are not openedconst char* url = "rtsp://184.72.239.149/vod/mp4://BigBuckBunny_175k.mov";int ret = -1;ret = avformat_open_input(&format_ctx, url, nullptr, nullptr);if (ret != 0) {fprintf(stderr, "fail to open url: %s, return value: %d\n", url, ret);return -1;}// Read packets of a media file to get stream informationret = avformat_find_stream_info(format_ctx, nullptr);if ( ret < 0) {fprintf(stderr, "fail to get stream information: %d\n", ret);return -1;}// audio/video stream indexint video_stream_index = -1;int audio_stream_index = -1;fprintf(stdout, "Number of elements in AVFormatContext.streams: %d\n", format_ctx->nb_streams);for (int i = 0; i < format_ctx->nb_streams; ++i) {const AVStream* stream = format_ctx->streams[i];fprintf(stdout, "type of the encoded data: %d\n", stream->codecpar->codec_id);if (stream->codecpar->codec_type == AVMEDIA_TYPE_VIDEO) {video_stream_index = i;fprintf(stdout, "dimensions of the video frame in pixels: width: %d, height: %d, pixel format: %d\n",stream->codecpar->width, stream->codecpar->height, stream->codecpar->format);} else if (stream->codecpar->codec_type == AVMEDIA_TYPE_AUDIO) {audio_stream_index = i;fprintf(stdout, "audio sample format: %d\n", stream->codecpar->format);}}if (video_stream_index == -1) {fprintf(stderr, "no video stream\n");return -1;}if (audio_stream_index == -1) {fprintf(stderr, "no audio stream\n");}int cnt = 0;AVPacket pkt;while (1) {if (++cnt > 100) break;ret = av_read_frame(format_ctx, &pkt);if (ret < 0) {fprintf(stderr, "error or end of file: %d\n", ret);continue;}if (pkt.stream_index == video_stream_index) {fprintf(stdout, "video stream, packet size: %d\n", pkt.size);}if (pkt.stream_index == audio_stream_index) {fprintf(stdout, "audio stream, packet size: %d\n", pkt.size);}av_packet_unref(&pkt);}avformat_free_context(format_ctx);return 0;
}

执行结果如下图所示:

GitHub:https://github.com/fengbingchun/OpenCV_Test

FFmpeg中RTSP客户端拉流测试代码相关推荐

  1. linux下使用FFmpeg搭建视频推流拉流测试

    1.概述 公司内部用的是rtmp推流,前端页面展示用webrtc方式拉流展示,基于srs构建的视频体系.之前不是负责视频模块的,为了更熟悉项目,自己大概有了个概念之后,先选取用ffmpeg方式构建一个 ...

  2. FFmpeg中libswresample库简介及测试代码

    libswresample库功能主要包括高度优化的音频重采样.rematrixing和样本格式转换操作. 以下是测试代码(test_ffmpeg_libswresample.cpp),对音频了解较少, ...

  3. FFmpeg中libswscale库简介及测试代码

    libswscale库功能主要包括高度优化的图像缩放.颜色空间和像素格式转换操作. 以下是测试代码(test_ffmpeg_libswscale.cpp): #include "funset ...

  4. FFmpeg中libavutil库简介及测试代码

    libavutil是一个实用库,用于辅助多媒体编程.此库包含安全的可移植字符串函数.随机数生成器.数据结构.附加数学函数.加密和多媒体相关功能(如像素和样本格式的枚举).libavcodec和liba ...

  5. 音视频学习之rtsp推拉流学习2(流媒体服务器ZLMediaKit)

    公司项目需要实现一个只是rtsp推流和rtsp拉流的业务机制,据说ZLMediaKit能满足rtsp推拉流的相关业务. 对ZLMediaKit流媒体服务器进行安装以及了解. 0:从开源库Readme中 ...

  6. LIVE555中RTSP客户端接收媒体流分析及测试代码

    LIVE555中testProgs目录下的testRTSPClient.cpp代码用于测试接收RTSP URL指定的媒体流,向服务器端发送的命令包括:DESCRIBE.SETUP.PLAY.TERAD ...

  7. FFmpeg 中 RTSP推流桌面和Android设备延时测试

    文章目录 1. FFMPEG 推流: 1.1 FFmpeg 源码准备 1.2 RTSP 推流服务器 2. 执行流程 2.1 启动服务器 2.2 执行桌面推流 2.3 播放 3. 安卓测试 1. FFM ...

  8. 流媒体方案,技术开源项目,包含Java调用FFMpeg(FFCH4J),推拉流服务器,nginx-http-flv-module,ckplayer,Flv.js,EasyPlayer.js集成

    文章目录 streaming_media 介绍 ckplayer拉流播放 软件介绍 功能介绍 软件架构 安装教程 使用说明 EasyPlayer.js拉流播放 简介 功能说明 集成使用示例 普通集成 ...

  9. SRS 4.0流媒体服务器开发环境搭建:包括推流、服务器配置、拉流测试

    SRS 4.0流媒体服务器入门系列 结合SRS官方Wiki以及本人对SRS的理解,推出<SRS 4.0流媒体服务器入门系列>,包括内容: SRS 4.0 开发环境搭建 SRS 4.0 配置 ...

最新文章

  1. SQL alter 的几种用法
  2. 有哪些ABAP关键字和语法,到了ABAP云环境上就没办法用了?
  3. 如何在php中插入数据并修改,php怎么同时向2张表里插入数据
  4. html5实现单点登录,用 Authing 10分钟实现单点登录(SSO)
  5. 【零基础学Java】—对象的向上和向下转型(二十七)
  6. Miktex + WinEdit 实现LaTeX写论文
  7. dell笔记本c语言系统,戴尔dell笔记本电脑U盘重装系统win7教程图解
  8. win10任务栏太宽而且调不了_win10系统任务栏变宽了的修复方法
  9. mysql怎么跨库查询_在MySQL中怎样进行跨库查询?
  10. 小程序 40163_安卓微信登入codebeenused,error40163
  11. 八月实施:电动自行车3c认证,电动自行车CCC认证费用周期,办理电动自行车ccc认证机构
  12. html5 黑色圆圈,html5使用canvas画空心圆与实心圆_html5教程技巧
  13. 乐鑫ESP32-S3双核处理器,专为 AIoT 市场打造
  14. 使用vuepress搭建静态博客
  15. 【Python卸载】与Windows上【Anaconda安装】
  16. prometheus监控HBase
  17. 数美科技成为《人工智能从业人员能力要求》等五项人才培养行业标准起草组全权成员单位
  18. Ripro子主题-站壳jizhi-chlid极致主题QIW源码市场
  19. Openstack删除虚机提示deleting状态无法删除
  20. 雷风影视php安装,雷风影视CMS v3.9.1

热门文章

  1. 使用cv2.Sobel()、cv2.Scharr()、cv2.Laplacian()寻找图像的梯度、边缘
  2. PCL:最小特征值与特征向量为什么可以表示法向量??
  3. 工业物联网LCD数码屏的驱动原理及低功耗设计(华大半导体HC32L136)
  4. harris角点检测与绘制。通过滑动滚动条来控制阈值,以控制检测角点的数量并返回角点坐标
  5. 机器学习(17)无监督学习 -- K-means算法与性能评估
  6. linux下Qt调用C++库文件(.so)程序实现
  7. Windows下修改jupyter默认工作路径教程
  8. java保存多张图片格式_从多个URL下载多个图像文件并保存到本地计算机(使用R)...
  9. java远程方法调用(rmi)--好_RMI-Java远程方法调用的实现(二)
  10. CV_8UCV_32FCV_32S