流媒体
杨尘心
让植根于现实的理想闪闪发光
展开
-
[Gstreamer] 使用 cerbero 构建
什么是GstreamerGstreamer 是一个流媒体框架 可以用来构建流媒体播放器 官方地址 https://gstreamer.freedesktop.org/如何用cerbero 构建 Gstreamercerbero 是被用来给开源项目 多平台编译系统,最终可以编译成我们所需要的package 或者SDK 在ubuntu 编译Gstreamer 会自动安装需要的环...原创 2018-03-19 17:04:43 · 2008 阅读 · 0 评论 -
[live555] demo rtspserver log 抓取地址
rtspserver log 地址: https://download.csdn.net/download/engineer_james/10609273原创 2018-08-19 21:49:01 · 477 阅读 · 0 评论 -
[live555] 谈一谈 SERVER RTP+NALU 分包过程
RTP HeaderNALU IndicatorNALU HeaderRBSP 原始数据原创 2018-08-20 09:47:50 · 1245 阅读 · 0 评论 -
[H264编解码参数] SPS
前言RTP完整流程 已经 解释了协议 所以要涉及具体的log分析 分为: 1. SPS 2. PPS 3. I帧 4. 非I帧 5. FU-ASPS 序列参数集合PPS 图像参数集I帧非I帧FU-A...原创 2018-08-17 19:39:27 · 6116 阅读 · 3 评论 -
[H264编解码参数] PPS
PPS 序列参数集合PPS 属于 [RTP header] + 单一NAL单元模式 ,所以RTP包结构如下 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1+-+-+-+-+-+-+...原创 2018-08-17 20:08:51 · 2005 阅读 · 0 评论 -
[H264编解码参数] SEI
SEI补充增强信息单元 :原创 2018-08-17 20:24:10 · 4948 阅读 · 0 评论 -
[live555] 谈一谈 server 发送缓冲区 作用和流程
前言live555 有个重要的参数 发送缓冲区////////// OutPacketBuffer //////////unsigned OutPacketBuffer::maxSize = 60000; // by default默认是60000 字节,但是还要看实际设置 在 MultiFramedRTPSink 初始化的时候通过setPacketSizes 重新设置发送缓冲...原创 2018-08-21 09:27:29 · 2137 阅读 · 1 评论 -
[live555] 从testRTSPClient.cpp DESCRIBE 发起请求 一
从Meida Server 到live555客户端之前零零碎碎写了 live555 MediaServer 以及关于RTSP 流程的处理 live555 处理 请求消息 一 “OPTIONS” live555 处理 请求消息 二 “DESCRIBE” live555 处理 请求消息 三 “SETUP” live555 处理 请求消息 四 “PLAY” live555 处理 请求消...原创 2018-09-05 20:48:46 · 907 阅读 · 0 评论 -
[live555] testRTSPClient.cpp DESCRIBE (后续处理) 二
摘要在testRTSPClient 发送 DESCRIBE 请求的时候,会解析返回的response,所以早早就把请求相关的信息封装在RequestRecord(包含cseq session 等信息),存放在fRequestsAwaitingResponse 队列中,等到轮询便处理 ...原创 2018-09-06 16:34:20 · 743 阅读 · 1 评论 -
[live555] 从testRTSPClient.cpp SETUP请求 三
前言在DESCRIBE 请求流程,已经将 live555 处理机制走了一遍,所以在SETUP请求过程中也是适用的SETUPrtspClient->sendSetupCommand(*scs.subsession, continueAfterSETUP, False, REQUEST_STREAMING_OVER_TCP);unsigned RTSPClient::send...原创 2018-09-07 13:54:13 · 812 阅读 · 0 评论 -
pjsip workshop
pjsipPJSIP 主要构成结构图 库的介绍 1. 最基础的库是PJLIB 2. 在基础库的基础上开发出8个不同作用的lib库 3. pjsua API 是可以调用的抽象的接口 1. 不同的lib库会放在相应库的lib文件夹下面 2. 如果想单独使用库 可以看 每个库的参考手册Reference Manuals PJSUA2PJSUA2是PJSUA原创 2018-01-19 15:49:30 · 3553 阅读 · 2 评论 -
pjsip 使用
pjsip workshoppjsip 介绍 背景: PJSIP 由英国Teluu团队主导开发,由Benny Prijono 创建,他的名字缩写pj,所以命名PJSIP 优点: 可移植性强:可运行在windows、windowsmobile、linux、unix、MacOS、RTEMS、Symbian 内存需求小:编译后只需要150k内存空间 支持原创 2018-01-19 15:49:06 · 21375 阅读 · 0 评论 -
[live555] 从testRTSPClient.cpp PLAY 请求 四
前言因为play 流程和DESCRIBE 和SETUP一样,所以,已经需要分析的内容很少,除了RTCP [live555] 从testRTSPClient.cpp DESCRIBE 发起请求 一 [live555] testRTSPClient.cpp DESCRIBE (后续处理) 二 [live555] 从testRTSPClient.cpp SETUP请求 三PLAY 请求...原创 2018-09-07 16:26:59 · 427 阅读 · 0 评论 -
从live555 实战中了解MakeFile
陈力就列 不能者止基本的shell 命令学习Makefile 《跟我一起写Makefile》,有余力者参考GNU make 参考书。电子版本 下载live555源码1.保证编译通过./genMakefiles linuxmake -j8上面配置 linux ,使用的参数在 config.linux 文件中是生成静态库的文件2. Makefile 编译...原创 2018-09-29 16:09:27 · 839 阅读 · 0 评论 -
[live555] testRTSPClient 通过ffmpeg 解码(记录)
live555 获取每一帧testRTSPClient 中Boolean DummySink::continuePlaying() { if (fSource == NULL) return False; // sanity check (should not happen) // Request the next frame of data from our input sour...原创 2018-10-16 17:23:56 · 1653 阅读 · 3 评论 -
[live555] RTP包 NALU FU-A等之间的关系
前言RTSP 协议流程 已经介绍在SETUP 确定了传输模式,而在PLAY的时候就开始传输RTP 包 并且,确定了第一个RTP url 序列号 和时间戳 RTP-Info: url=rtsp://10.0.2.15/ss1.mkv/track1;seq=57885;rtptime=4285367567开始学习RTP包组成RTP 包组成协议基本知识 这个真的 看协议...原创 2018-08-16 23:49:37 · 2791 阅读 · 0 评论 -
rtsp 完整流程 环境---[live555 搭建服务器 / VLC 作为客户端/ RawCap.exe 抓取包]
前言live555 rtspserver端 创建并且接收客户端数据 环境下,用RawCap 抓取了完整的log WireShark 打开预览如下 从 OPTIONS DESCRIBE SETUP PLAY TEARDOWN 完整的 RTSP协议流程 我在本地的操作,就是播放视频,然后teardown 点击vlc 停止播放,发送的请求具体协议过程1. OPTIONS...原创 2018-08-16 17:14:39 · 1191 阅读 · 0 评论 -
rtsp rtp 包抓取工具rawCap 和 wireshark
wireshark安装参考: https://www.cnblogs.com/the-tops/p/7423390.html 检查自己的电脑环境 1. Visual C++ Redistributable for Visual Studio 2015 系统要求:Windows 7情况下必须是Windows 7 with SP1.或者Windows10 2.系统检测方法:命令行输入...原创 2018-08-16 14:04:17 · 1956 阅读 · 0 评论 -
[Gstreamer] tutorials 引用SDK 【android 应用】
Gstreamer tutorials下载gst-docs链接:git clone git://anongit.freedesktop.org/gstreamer/gst-docs 下载的教程是 eclipse 下的项目,所以需要导入android studio 使用ubuntu 安装更新 android studio因为 gstramer 文档很老,没有详细描述andr...原创 2018-03-19 23:43:09 · 1002 阅读 · 0 评论 -
rtsp 协议流程
rtsp 协议流程 学习RTP Real-time Transport Protocol 实时传输协议 RTSP Real Time Streaming Protocol 实时流协议 RTSP 和 RTP 开发客户 一般是C/S 模式整个流媒体传输的 协议流程整个过程只关注 协议流程 (不关注细节,细节可以在遇到bug时处理)首先是RTSP 流程1. 客户端创建so...原创 2018-03-26 17:43:51 · 9339 阅读 · 1 评论 -
[pjsip] 中 define 的妙用
define 语法define func funcA 上面的就是简单的替换 func 替换funcA的使用看下pjsip的用法// 案例: PJ_LOG(2, (__FILE__, "current value is %d", value));#define PJ_LOG(level,arg) do { \ if (lev...原创 2018-02-02 14:59:56 · 364 阅读 · 0 评论 -
[gstremer] 搭建debug环境 和 搭建 rtsp服务器 介绍
gstreamer 协议剖析在自己摸索gstreamer 的过程中,遇到很多困难,比如编译、比如服务器搭建、比如glib思想等总结最基础的debug gstreamer的环境 [修正] 下面的编译经验 是经过编译 android 平台,然后再编译linux 平台,才可以进行修改测试,所以,下面的参考只是我总结的,后面我想再熟悉一点,再写一篇总结首先是编译gstreamer电脑环境...原创 2018-04-27 18:33:57 · 1126 阅读 · 0 评论 -
[live555 处理] 请求消息 二 "DESCRIBE"
根据log 分析 RTSPServer::RTSPClientConnection::handleRequestBytes 中对DESCRIBE 请求的处理1. 解析 请求和OPTIONS 请求一样fprintf(stderr, "RTSPClientConnection[%p]::handleRequestBytes() %s %d new bytes:%s\n", ...原创 2018-08-09 15:30:43 · 629 阅读 · 0 评论 -
[live555 处理] 请求消息 三 "SETUP"
log 接收的SETUP 请求RTSPClientConnection[0xef5bfc40]::handleRequestBytes() read 158 new bytes:SETUP rtsp://192.168.0.10:8554/H264Video.mkv/track1 RTSP/1.0CSeq: 3Transport: RTP/AVP;unicast;client_por...原创 2018-08-09 20:38:14 · 615 阅读 · 0 评论 -
[live555 处理] 请求消息 四 "PLAY" [续]
前言上一节 因为没有对后面部分 packframe 流程进行详细扩展,这一节分析packframe 框架流程图看出来需要判断 是不是打包成功,当然代码中并不是这么判断的,基于很多个维度判断是否打包成功 如果打包成功,直接发送出去sendpacketifnecessary否则继续打包packframepackframe 详细流程上面的流程是通过 放在服务器...原创 2018-08-14 20:24:11 · 308 阅读 · 0 评论 -
[live555] 环境搭建
参考教程https://www.cnblogs.com/xlpsky/p/5807140.htmlhttp://www.live555.com/http://www.live555.com/liveMedia/一致认为gstreamer 比较难维护,所以转到live555 ,可能我的能力还没有达到吧。学习了2个星期C++。就开始上手了下载源码http://www.li...原创 2018-08-02 20:03:47 · 2110 阅读 · 0 评论 -
FU-A 分片单元 过程
FU-ANON IDR 属于 [RTP header] + 拆分的NAL单元 ,所以RTP包结构如下 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1+-+-+-+-+-+-+-+-+-...原创 2018-08-17 21:33:06 · 5495 阅读 · 0 评论 -
[live555] 谈一谈 HandlerIterator \ HandlerDescriptor \HandlerSet 构成迭代器
前因在 创建 live555 服务的时候 TaskScheduler* scheduler = BasicTaskScheduler::createNew(); UsageEnvironment* env = BasicUsageEnvironment::createNew(*scheduler);会创建BasicTaskScheduler0::BasicTaskSche...原创 2018-08-08 16:34:00 · 533 阅读 · 1 评论 -
[live555 处理] 请求消息 四 "PLAY"
前言在 live555 rtspserver端 创建并且接收客户端数据 根据rtsp 协议需要根据 handleRequestBytes 处理请求数据而在 SETUP 请求中,已经准备好了 RTP_UDP 传输的socket,所以进行 PLAY 请求的处理 LIVE555 主要在函数 handleCmd_PLAY处理 但还是从handleRequestBytes 开始分析PL...原创 2018-08-13 11:18:23 · 448 阅读 · 0 评论 -
[live555] rtspserver端 创建并且接收客户端数据
前言本文分析是基于已经搭建好的live 555 环境, media server 能正常跑起来准备知识因为 文章中socket 进行通信,所以最好补习下linux下最基本的socket 通信基本流程,其他涉及知识点会补上其实最核心的思想就是socket 三次握手,如下图 media server 构建一个rtsp 服务器直接分析源码 live555MediaSe...原创 2018-08-08 21:53:40 · 1886 阅读 · 0 评论 -
[live555 处理] 请求消息 一 "OPTIONS"
前言前面一篇 分析到了 RTSPServer::RTSPClientConnection::handleRequestBytes 进行处理请求消息消息处理分析 ptr[newBytesRead] = '\0'; fprintf(stderr, "RTSPClientConnection[%p]::handleRequestBytes() %s %d new byt...原创 2018-08-08 22:32:09 · 592 阅读 · 0 评论 -
[live555] 谈一谈 (*.mkv) track1 和 track2 的信息获取
发生时间 在处理Describe 请求在处理describe 请求的时候 DynamicRTSPServer::lookupServerMediaSession ,rtsp服务器会查找SDP信息并且创建,包括查找track1和track2 的信息即 音频视频轨道信息live555 处理 sdp消息 二 “DESCRIBE”[2]:...原创 2018-08-18 19:05:03 · 1221 阅读 · 0 评论 -
[live555]客户端优化 丢包问题
背景描述:在流媒体传输的时候,I P P P B B P I P B B I 类似的一帧传输,但是经常会随机出现丢包的情况,如何改善用户体验,就显的特别重要其中花屏的体验十分差,花屏是因为 I帧中间某一帧丢了包导致的问题,因为每一帧之间的变化和差距不是很大,所以最好的办法就是直接跳到下一个I帧 ,或者通过RTCP 请求丢失的包,重新排序解码这篇优化,采用第一种,环境在live555中模拟丢...原创 2018-11-29 11:12:44 · 2931 阅读 · 12 评论