流媒体
文章平均质量分 93
老衲不出家
寨都码农一枚,平常喜欢关注音视频技术,从事音视频行业小几年,主要是音视频编解码,语音处理,移动端音视频开发,博客是一个自我记录的地方,如果不妥之处,请高人不吝赐教,如有侵权,请联系我删除。tanningzhong@126.com
展开
-
ZLMediakit独家特性介绍
1、先播放后推流痛点:推流成功前不能提前播放场景介绍:有些及时推流的场景,存在推流和播放同时发生的场景,这种场景一般是一对一的,譬如说基于rtmp推流的行车记录仪,用户在调阅车载摄像头视频的,下发推流命令给设备时,同时开始播放视频,如果播放请求先于推流到达流媒体服务器,那么流媒体服务器通常会立即返回流未找到的错误,为了解决这个问题,一般的解决方案是,通过设备确认推流成功再开启播放,但是这样往往会增加视频打开延时,拉低用户体验。zlmediakit针对此场景作出特别优化,可以在流不存在时,先不回原创 2022-01-13 19:17:24 · 2872 阅读 · 1 评论 -
RTMP协议消息分析
RTMP协议消息分析一. RTMP握手RTMP 握手分为简单握手和复杂握手,现在Adobe公司使用RTMP协议的产品用复杂握手的较多,不做介绍。1.1 握手包格式C0和S0 0 1 2 3 4 5 6 7+-+-+-+-+-+-+-+-+| version |+-+-+-+-+-+-+-+-+ C0 and S0 bitsC0和S0:1个字节,包含了RTMP版本, 当前RTMP协议的版本为 3。C1和S1 0 1原创 2020-11-18 21:28:26 · 569 阅读 · 0 评论 -
TCP粘包问题分析和解决
原文链接:https://www.cnblogs.com/kex1n/p/6502002.html在socket网络程序中,TCP和UDP分别是面向连接和非面向连接的。因此TCP的socket编程,收发两端(客户端和服务器端)都要有成对的socket,因此,发送端为了将多个发往接收端的包,更有效的发到对方,使用了优化方法(Nagle算法),将多次间隔较小、数据量小的数据,合并成一个大的数据块,然后进行封包。这样,接收端,就难于分辨出来了,必须提供科学的拆包机制。对于UDP,不会使用块的合并优化算法,原创 2020-10-20 21:03:13 · 424 阅读 · 0 评论 -
ffmpeg截取视频片段命令优化
正常简单命令:ffmpeg -i input.mp4 -ss 1:05 -t 10 output.mp4-ss 5指定从输入视频第1:05秒开始截取,-t 10指明最多截取10秒。但是上面的命令可能会比较慢,更好的命令如下:ffmpeg -ss 1:05 -i input.mp4 -t 10 -c:v copy -c:a copy output.mp4把-ss 1:05放到-i前面,与原来的区别是,这样会先跳转到第1:05秒在开始解码输入视频,而原来的会从开始解码,只是丢弃掉前1原创 2020-06-11 16:01:49 · 2116 阅读 · 0 评论 -
Wireshark h264_export.lua插件--从抓包RTP导出 H.264 负载数据
1.MAC系统1.1 Lua插件代码怎么用?1.1.1 确认Wireshark是否支持Lua菜单栏-->Help-->About Wireshark注意看弹出的窗口中的Wireshark选项卡1.1.2 启用Lua在About窗口中的Folders选项卡还可以查看各种文件夹的位置在Global configuration的位置有个init.lua,其实这是一个到...原创 2019-10-29 14:07:30 · 2007 阅读 · 0 评论 -
在HTML5上开发音视频应用的五种思路
问题背景:无论是实时视频监控还是直播点播等应用场景,最起码的一个操作就是播放视频。其中最基本的思路就是利用OS的API在PC开发桌面应用、在移动端开发Native App,目前这种技术已经成熟,大厂小厂都是这么做的,但是缺点也很明显:开发比较费时费力,需要IOS开发一遍再去Android开发一遍。特别对于一些非刚性需求比如用户家里有一两个监控摄像头,一个礼拜也不会打开看几次,你却要他下载和安装...原创 2019-10-28 09:44:52 · 1192 阅读 · 0 评论 -
音视频解封装:MP4核心Box详解及H264&AAC打包方案
问题背景:上一篇文章《音视频封装:MP4结构概述和分析工具》让大家看了下MP4的主要结构和推荐了一些分析工具,如果你对MP4没有任何了解,还是先看上文,了解MP4的基本结构,其中还有许多工具需要下载和使用。这篇文章借助一个实例分析下核心Box的语法结构和字段含义,其次总结下H264码流的是如何打包到MP4中的,这篇文章也是下篇文章计算一些音视频信息,实现音视频操作和对MP4码流处理的基础。...原创 2019-10-22 14:57:25 · 2549 阅读 · 0 评论 -
5G媒体流架构
引言本文来自IBC2019(国际广播大会),主要讲述了3GPP为5G开发了一种新的媒体流架构,其中加入了媒体产业的最新成果和5G系统提供的新特性。该媒体服务架构注重移动网络运营商和媒体服务提供商之间的协作场景的优化,同时这些优化也适应传统广播的发展需要。新的架构支持目前支持单播下行媒体分发和上行流媒体。5GMSA的背景现行的3GPP分组交换流(PSS)架构是为3...原创 2019-10-14 11:16:36 · 1336 阅读 · 0 评论 -
优化延迟的最佳视频传输方案(一)
流媒体服务逐渐成为全球媒体和娱乐业务的核心,根据目前市场的数据,由于增长率是传统电视的10倍,OTT视频已经占到了行业总收入的15%,预计到2022年将占据市场收入的三分之一。要想实现视频流的最优化传输,就必须实现在传输的各个阶段都协调工作,达到降低延迟最优的效果。首先,说明一下在传输过程中的第一个阶段的优化:第一公里(the first mile)传输中的优化。PART1 分发链前段...转载 2018-10-30 10:32:18 · 5837 阅读 · 0 评论 -
优化延迟的最佳视频传输方案(二)
上一篇文章《优化延迟的最佳视频传输方案(一)》介绍了在整个视频传输系统中的分发链前端和媒体内容准备方面的延迟优化方案,本文将继续介绍传输系统的接下来的优化方案,包括媒体内容传输和播放器端的优化。 PART3 内容传输的最佳方案 消费者希望在观看网络视频流时拥有和观看传统电视节目一样甚至更好的体验效果,本部分介绍的是在视频传输过程中,媒体内容传输过程中可...转载 2018-10-30 10:33:12 · 1875 阅读 · 0 评论 -
Nginx RTMP 模块 nginx-rtmp-module 指令详解
译序:截至 Jul 8th,2013 官方公布的最新 Nginx RTMP 模块 nginx-rtmp-module 指令详解。指令Corertmp语法:rtmp { ... }上下文:根描述:保存所有 RTMP 配置的块。server语法:server { ... }上下文:rtmp描述:声明一个 RTMP 实例。rtmp { server { }}listen语法:li...翻译 2018-11-21 11:20:47 · 2726 阅读 · 0 评论 -
利用nginx搭建RTMP视频点播、直播、HLS服务器
开发环境Ubuntu 14.04 servernginx-1.8.1nginx-rtmp-modulenginx的服务器的搭建安装nginx的依赖库sudo apt-get updatesudo apt-get install libpcre3 libpcre3-devsudo apt-get install openssl libssl-dev配置并编译nginx 使用ng...转载 2018-11-21 15:02:52 · 2163 阅读 · 1 评论 -
Ubuntu 18.04 编译安装Janus
Ubuntu 18.04 编译安装Janus找了全网没看到有关18.04安装Janus的文档,特此记录,当然最好的文档是官方的编译文档,目录在Janus的Git官网的README.md文件。下文主要记录一下准备环境过程中的坑,有些坑已经避免,所以直接贴出了采坑后的解决方案了。准备环境安装基础必备软件包sudo aptitude install libmicrohttpd-dev lib...原创 2019-03-04 19:25:15 · 2250 阅读 · 0 评论 -
ZLMediaKit高并发实现原理
项目介绍ZLMediaKit是一套高性能的流媒体服务框架,目前支持rtmp/rtsp/hls/http-flv流媒体协议。该项目已支持linux、macos、windows、ios、android平台,支持的编码格式包括H264、AAC、H265(仅rtsp支持H265);采用的模型是多线程IO多路复用非阻塞式编程(linux下采用epoll、其他平台采用select)。该框架基于C++1...原创 2019-03-25 16:44:01 · 14800 阅读 · 0 评论 -
通过 wireshark 抓包了解直播流媒体RTMP协议基本过程
先给出RTMP协议的原文件https://www.adobe.com/devnet/rtmp.html需要用到的时候可以参考一下~。做推流直播接触最多的并且主要也是RTMP协议RTMP协议是应用层协议,是要靠底层可靠的传输层(TCP) 协议(通常是TCP)来保证信息传输的可靠性的。在基于传输层协议的链接建立完成后,RTMP协议也要客户端和服务器通过“握手”来建立基于传输层链接之上的RTMP...转载 2019-06-20 11:10:01 · 12199 阅读 · 1 评论 -
FFmpeg命令
引言FFmpeg是领先的多媒体框架,本帖将展示六个常用的FFmpeg命令。FFmpeg的官网下载地址为:https://ffmpeg.org/download.html。1、基础命令ffmpeg -i input.mp4 output.mp4命令解释: ffmpeg执行ffmpeg程序,如果你没有将ffmpeg加入环境变量,那么你需要输入ffmpeg的完整路径...原创 2019-07-12 16:58:12 · 614 阅读 · 0 评论 -
FLV协议5分钟入门浅析
FLV协议简介FLV(Flash Video)是一种流媒体格式,因其体积小、协议相对简单,很快便流行开来,并得到广泛的支持。常见的HTTP-FLV直播协议,就是使用HTTP流式传输通过FLV封装的音视频数据。对想要了解HTTP-FLV的同学来说,了解FLV协议很有必要。概括地说,FLV 由 FLV header 跟 FLV file body 两部分组成,而 FLV file body...原创 2019-08-20 15:39:24 · 373 阅读 · 0 评论 -
UDP成为低延时流媒体关键 选SRT还是QUIC?
一个充满挑战的任务—通过互联网实现低延迟、电视级别的优质视频内容,已经演变成了一个不那么令人沮丧但仍然令人生畏的挑战。 对于执行流媒体操作的人员来说,如何在SRT,QUIC,WebRTC和CMAF之间选择,是日常工作中一个特别令人恼火的干扰。 在消费者拥有比以往更多的服务选择时(根据Parks Associates的说法,仅在美国就有超过200种OTT服务),如果不喜欢他们所看到的...转载 2018-10-30 10:27:27 · 3252 阅读 · 0 评论 -
mac和windos平台编译obs-studio
一. mac下xcode编译obs-studio1. 准备工作安装brew 略 安装其他工具brew install ffmpeg x264 qt5下载代码git clone --recursive https://github.com/obsproject/obs-studio.git2. 生成xcode工程1. cd obs-studio2. mkdir...原创 2018-09-13 16:11:58 · 2997 阅读 · 2 评论 -
OBS-Studio编译环境生成&&在VS2017添加QtWebEngine
介绍老牌直播软件OBS-Studio编译的环境生成和Qt使用遇到的一些麻烦事。很多网上的编译教程其实已经过时了。当然这篇最后也是会过时的,只能起到一个参考的作用。现在已经没有网上教程那么复杂。还是参考官方的最简单。我的环境:Win10 64位 VS2017还在使用VS2010?,需要先去下载VS2013以上版本的IDE。Stuck on an older toolset version...原创 2018-09-13 11:35:17 · 1837 阅读 · 1 评论 -
Ubuntu下安装TelePresence
本文将演示TelePresence的安装,已ubuntu 14.04 64bit为安装平台,理论上适合各种linux平台,因为大部分都是采用源码的方式,如果使用centos等平台只需变换软件安装的方式而已:1.apt-get update upgrade2.apt-get install make libtool autoconf subversion git wget cmake gcc原创 2015-02-04 16:57:47 · 1536 阅读 · 0 评论 -
windows下编译ffmpeg和x264
编译x264要在msys.bat的最前面加上一行:call "D:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\vcvars32.bat"配置:./configure enableshared --prefix=/home/tnz/third_lib/x264编译make原创 2015-09-19 16:58:06 · 1370 阅读 · 0 评论 -
RTP/RTCP协议如何实现媒体流的同步
RTP的同步其实就靠这几个东西来完成:1. RTP帧头的以下三个域 sequence number, timestamp,SSRC2. RTCP SR报文的以下三个域:RTP timestamp, NTP timestamp, SSRC of sender同步机制其实十分简单:先说RTP头1. 某RTP流的第一个包中的sequence number是一个随机产生的16bit原创 2016-09-20 11:30:12 · 4461 阅读 · 0 评论 -
ios编译linphone 开启x264编译
代码下载完成后,执行如下命定./prepare.py -DENABLE_NON_FREE_CODES=ON -DENABLE_X264 armv7 arm64 && make 即可!原创 2016-12-14 18:01:06 · 1029 阅读 · 0 评论 -
VS2015 编译live555源码
编译过程略了,只需要设置好环境,编译出库,解决依赖就差不多了github地址:https://github.com/tanningzhong/live555-20161011-vs2015原创 2016-12-02 16:40:29 · 1856 阅读 · 0 评论 -
x264码率控制参数详解
x264码率控制参数详解 -q, --qp Force constant QP (0-51, 0=lossless)默认:无说明:三种可选的码率控制方法(bitrate, CQP,CRF)之一。设置x264使用固定QP模式。设定的QP将被作为P帧的量化参数,I帧和B帧的量化参数由–ipratio and –pbratio参数进一步算出。CQP模式使用固定的QP转载 2016-12-09 11:33:21 · 2433 阅读 · 0 评论 -
linphone-iphone最新源码编译
clone编译代码之前,肯定是先clone最新代码git clone https://github.com/BelledonneCommunications/linphone-iphone --recursive更新完后发现跟原来的编译方式有了比较大的区别,更新完后编译步骤更清晰,更方便. 可以执行./prepare.py –help 查看帮助config开始配置前,请使用.原创 2016-12-14 15:31:24 · 1648 阅读 · 0 评论 -
Doubango RTP包传输使用UDT可靠传输协议,解决RTP丢包问题
使用SIP做过VOIP通话的同学,肯定被RTP丢包弄的焦头烂额,必定尝试过不少的办法,比方:1、丢包重传(NACK)2、前向纠错(FEC)3、丢帧处理但效果往往不尽如人意,那有没有一劳永逸的方法?确实,网络发展到现在,家庭带宽随随便便都是百兆的今天,为什么还有让人困扰不已的丢包问题?为何不换成TCP传输,假如延时容许的情况下,UDT就是为了解决这个问题的。UDT建立于UDP转载 2017-06-30 15:08:06 · 1269 阅读 · 0 评论 -
UDT协议-基于UDP的可靠数据传输协议
UDT协议-基于UDP的可靠数据传输协议1. 介绍 随着网络带宽时延产品(BDP)的增加,通常的TCP协议开始变的低效。这是因为它的AIMD(additive increase multiplicative decrease)算法彻底减少了TCP拥塞窗口,但不能快速的恢复可用带宽。理论上的流量分析表明TCP在BDP增加到很高的时候比较容易受包损失攻击。另外,继承自转载 2017-06-30 16:34:58 · 443 阅读 · 0 评论 -
librtmp协议分析---RTMP_SendPacket函数
接下来我们分析RTMP_SendPacket函数。我们先了解一下rtmp的消息格式chunk。RTMP的head组成RTMP的head在协议中的表现形式是chunk head,前面已经说到一个Message + head可以分成一个和多个chunk,为了区分这些chunk,肯定是需要一个chunk head的,具体的实现就把Message head的信息和chunk head的信转载 2017-07-14 11:20:43 · 501 阅读 · 0 评论 -
视频学习笔记:Android ffmpeg解码多路h264视频并显示
背景Android设备上使用ffmpeg解码多路h264视频,抽取了一个简单demo方便日后参考,在此记录一下。demo中主要涉及以下功能:1.ffmpeg解码h264视频为yuv帧 2.使用ffmpeg将yuv帧转换为可以在画布上渲染的rgb帧 3.将android的SurfaceView类传入jni层并使用rgb帧进行渲染 4.使用Java类包装c++类,多线程解码转载 2017-07-14 11:22:35 · 2224 阅读 · 1 评论 -
利用 FFmpeg 在 Android 上做视频编辑
众所周知,Android 对涉及底层硬件的 API 控制力都比较弱,从其难用的 Camera/Camera2、MediaCodec 等 API 就可见一斑。最近项目中有需要对视频进行编辑的需求,总体分析有如下技术上需要实现的点: 1.需要支持视频尺寸裁剪,给出左上角和右下角的坐标后裁剪两个点描述的区域; 2.需要支持帧预览,裁剪前需要向用户展示时间线上的预览图;转载 2017-09-15 11:23:02 · 7945 阅读 · 0 评论 -
如何在Android中直播RTMP HLS
在android上,视频/音频流直播是极少有人关注的一部分。 每当我们讨论流媒体,RTMP(Real Time Messaging Protocol)是不可或缺的。RTMP是一个基本的视频/音频直播流协议,但是不幸的是Android标准的VideoView不支持RTMP的播放。 因此,如果想在android上播放RTMP直播流,你必须使用支持RTMP协议的库。在本教程中我们将讨论如何通过使转载 2018-01-25 09:35:44 · 1405 阅读 · 0 评论 -
librtmp windows编译提示“无法解析的外部符号 _netstackdump”错误
如题解决办法去掉//#ifdef _DEBUG//extern FILE *netstackdump;//extern FILE *netstackdump_read;//#endif//#ifdef _DEBUG// fwrite(ptr, 1, nBytes, netstackdump_read);//#endif//#ifdef _DEBUG// fwrite(buf, 1, l...原创 2018-04-20 14:23:25 · 825 阅读 · 2 评论 -
如何计算视频最佳码率
前言在音视频直播中经常遇到不同分辨率对应不同的码流问题,码流的大小通常是与分辨率和帧率密切相关的。对于在直播中可以播放多媒体文件的情况更加复杂。因为很多媒体文件经过转码后都不是标准的比例(4:3或16:9)。对这种情况我们一般有两种解决办法:1.通过转码服务器,将不规则的视频转成标准规则视频。2.对播放器进行修改。我们这里使用的是第二种情况。但问题是,由于视频不分辨率是不规的,那么我们的码流设置多...转载 2018-05-30 09:51:52 · 7886 阅读 · 0 评论 -
OBS-Studio MAC平台编译 --- 史上最全
前言之前一直在Windows上做开发,后来转iOS。所以没有Windows环境的机器了。最近又在做斗鱼直播,但是遇到斗鱼没有Mac上的直播App。所以自己上网找了一下,发现obs。正巧自己又是做C++开发的,所以准备看看obs的代码。What is OBS?This project is a rewrite of what was formerly known as “Open Bro...转载 2018-09-12 18:58:49 · 2486 阅读 · 0 评论 -
RTMP/RTP/RTSP/RTCP的区别
RTP/RTSP/RTCP的区别 用一句简单的话总结:RTSP发起/终结流媒体、RTP传输流媒体数据 、RTCP对RTP进行控制,同步。之所以以前对这几个有点分不清,是因为CTC标准里没有对RTCP进行要求,因此在标准RTSP的代码中没有看到相关的部分。而在私有RTSP的代码中,有关控制、同步等,是在RTP Header中做扩展定义实现的。另外,RFC3550可以看作是RFC188转载 2014-12-08 17:09:55 · 620 阅读 · 1 评论