音视频
文章平均质量分 65
Jacob_job
音视频软件开发
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
使用ffmpeg的lib库解码H264/H265
ffmpeg的开源代码自行在ffmpeg的官方下载(http://ffmpeg.org/)一、编译 编译之前需要先安装gcc编译器,本文使用的是arm-linux的交叉编译器,这里简称arm-linux-gcc本文使用的版本是 ffmpeg-3.3.3,下载得到ffmpeg-3.3.3.tar.bz2mkdir disttar xvf ffmpeg-3.3.3.tar.bz2原创 2017-09-27 17:30:30 · 8668 阅读 · 2 评论 -
rtmp信令交互过程分析二-握手(Handshake)
rtmp信令第一步是握手(Handshake),握手有Simple Handshake和Complex Handshake,Simple Handshake为简单握手,不需要使用加密算法校验,Complex Handshake为复杂握手,需要使用openssl的算法校验。一、Simple Handshake概述1) C0 1 byte,表示客户端RTMP的版本号。2) C1...原创 2018-08-20 09:47:22 · 1384 阅读 · 0 评论 -
rtmp信令交互过程分析三-连接(connect)
概述握手之后就是连接(connect),由客户端发起,服务端响应,connect指定的app。1、C->S : connectapp:需要connect的app名称flashVertcUrlfpadcapabilitiesaudioCodecsvideoCodecsvideoFunction2、S->C : Window Acknowledgement...原创 2018-08-20 09:48:27 · 2001 阅读 · 0 评论 -
rtmp信令交互过程分析四-发布(publish)
概述连接成功之后由客户端选择publish还是play,这里讲的是publish。1、C->S : releaseStream、FCPublish、createStreamreleaseStream:释放stream,这一步的作用是通知服务端释放对应的stream,以便接下来重新创建stream。FCPublishcreateStream2、S->C : _re...原创 2018-08-20 09:49:25 · 2892 阅读 · 0 评论 -
rtmp信令交互过程分析五-播放(play)
概述连接成功之后由客户端选择publish还是play,这里讲的是play。1、C->S : createStream2、S->C : _result服务端对客户端createStream请求的反馈3、C->S : getStreamLength、play、Set Buffer LengthgetStreamLength:获取stream的时间长度pl...原创 2018-08-20 09:50:09 · 1909 阅读 · 0 评论 -
rtmp信令交互过程分析六-元数据(onMetaData)
概述在publish或者play之后就是开始传输媒体数据了,媒体数据分为3种,script脚本数据、video视频数据、audio音频数据。首先需要传输的是脚本数据onMetaData,也称为元数据。onMetaData主要描述音视频的编码格式的相关参数。如果是发布端向服务器推流,则onMetaData的方向是C->S,如果是播放器向服务器拉流,则onMetaData的方向是S-&g...原创 2018-08-20 09:51:17 · 2935 阅读 · 1 评论 -
rtmp信令交互过程分析七-音视频数据(video audio data)
概述在传输完元数据onMetaData之后就开始传输音视频数据了,如视频是H.264编码,第一帧视频帧需要是SPS和PPS,后面才是I帧和P帧。如果是发布端向服务器推流,方向是C->S,如果是播放器向服务器拉流,方向是S->C。音视频数据包的封装后面的文章在详谈,这里只是讲信令交互。举例发布端向服务器推流 C->SVideo DataRTMP ...原创 2018-08-20 09:52:13 · 1627 阅读 · 0 评论 -
rtmp数据封装一-块(chunk)
简介由于一帧音视频数据有时候会很大,比如几十M甚至更大。但是为了方便在网络上传输,需要把数据拆分成一个个较小的块,这里称之为消息块(Chunk)。常见的是每块大小为4000 byte左右。Chunk的结构如下:[Chunk Basic Header][Chunk Message Header][Extended TimeStamp][Chunk Data][Chunk B...原创 2018-08-20 09:53:20 · 2223 阅读 · 0 评论 -
rtmp数据封装二-AMF
简介rtmp协议在传输script数据onMetaData时使用AMF(Action Message Format)格式封装。AMF_TYPE对应的编号:0 : AMF_NUMBER1 : AMF_BOOLEAN,2 : AMF_STRING,3 : AMF_OBJECT,4 : AMF_MOVIECLIP,5 : AMF_NULL,6 : AMF_UNDEFINED,...原创 2018-08-20 09:54:09 · 1354 阅读 · 0 评论 -
rtmp数据封装三-视频(H264&H265)
前面文章《rtmp数据封装一-块(chunk)》中讲到rtmp传输媒体数据时是把一整帧数据拆分成chunk的形式发送的。其实一帧媒体数据在拆分成chunk之前还需要进行必要的头部信息封装,本文介绍rtmp协议中H.264/H.265视频数据的头部信息封装。H.264 rtmp头部信息封装SPS PPSAVCDecoderConfigurationRecordframe t...原创 2018-08-21 00:16:34 · 3799 阅读 · 2 评论 -
rtmp信令交互过程分析一-概述
后续会写一系列关于rtmp的文章,这是第一篇信令交互的概述。使用wireshark抓包分析rtmp推流和拉流过程的信令,大致如下:通用部分箭头>>>表示C->S,箭头<<<表示S->C>>> Handshake C0+C1<&a原创 2018-08-20 09:46:11 · 1295 阅读 · 0 评论 -
web无插件解码播放H264/H265(WebAssembly解码HTML5播放)
我之前写过一篇《web无插件解码播放H264/H265(js解码HTML5播放)》,与本文的项目意义基本一致,不同的是实现方案有一定差异。之前介绍的是纯JS解码,本文介绍WebAssembly解码。本项目已经用于实际产品之中,亲测可用。项目描述:视频传输使用websocket协议,ipc后端推流使用C语言编程,web前端收流使用js语言。视频解码库使用WebAssembly实现...原创 2018-03-04 14:42:55 · 48758 阅读 · 29 评论 -
使用ffmpeg的lib库实现视频窗口 原始宽高比例/拉伸铺满
播放器的实际宽高比例常常与视频帧数据的原始宽高比例不一致。如果选择保持原始比例,则上下或左右会出现黑边,优点是视频中的物体保持原始比例、比较真实,但缺点是黑边会影响界面美观。如果选择拉伸铺满,优点是不会出现黑边,感觉视频窗口比较大,但缺点是拉伸之后视频中的物体失去了真实的宽高比例。原创 2017-09-27 18:25:18 · 3506 阅读 · 0 评论 -
使用ffmpeg的lib库缩放视频yuv宽高尺寸
播放器显示的视频宽高尺寸常常与视频帧数据的原始宽高尺寸不一致,可以使用ffmpeg对解码后的yuv数据进行缩放。原创 2017-09-27 18:00:39 · 2446 阅读 · 1 评论 -
web无插件解码播放H264/H265(js解码HTML5播放)
项目意义:长久以来,安防领域的网络摄像机(IPC)的WEB视频直播都依赖于浏览器插件,IE浏览器使用ActiveX插件,Chrome和Firefox浏览器使用NPAPI插件。之所以开发浏览器插件来收流、解码、播放IPC的实时视频,是因为早期HTML的发展过于缓慢,在纯web代码无法实现的情况下开发者只能使用插件来辅助。此方法的弊端显而易见,比如用户使用不方便,打开web之后需要点击下载并安装插件才...原创 2017-09-28 13:00:08 · 92577 阅读 · 25 评论 -
rtsp基本信令
1、OPTIONSclient->serverOPTIONS rtsp://192.168.0.158:554/video_high1080.h264 RTSP/1.0CSeq: 2User-Agent: LibVLC/2.2.2 (LIVE555 Streaming Media v2016.01.12)server->clientRTSP/1.0 200 OK...原创 2018-03-03 20:22:08 · 2000 阅读 · 0 评论 -
rtp基本封包格式
rtp包易于过大,一般每个包不要超过1400,这里设置为1380,即DEFAULT_MTU=1380这里介绍的媒体格式有视频:H264/H265,音频:AAC1、如果媒体包小于DEFAULT_MTU时可直接写入rtp包中,示例代码: unsigned char *pNAL; //媒体数据包 int nalsize; //媒体数据包长度 ...原创 2018-03-03 20:26:15 · 4695 阅读 · 0 评论 -
jrtplib的使用
简介jrtplib是用C++开发的rtp/rtcp库,非常方便嵌入到C++工程中,可用于rtsp server或rtsp client的开发之中,或者其他以rtp/rtcp格式的推流与收流。初始化示例代码:RTPSession rtp_session;unsigned short rtp_port = 6666;unsigned int payload_type = 96;...原创 2018-03-03 20:29:22 · 2161 阅读 · 0 评论 -
rtmp信令格式
rtmp以TCP方式推流,分为一个个消息包。一、握手 握手开始于客户端发送 C0,C1 块。 服务端在发送 S0 和 S1 之前必须等待接收 C0,也可以等待接收 C1。 服务端在发送 S2 之前必须等待接收 C1。 在发送 C2 之前客户端必须等待接收 S1 。 客户端在发送任何数据之前必须等待接收 S2。 服务端在发送任何数据之前必须等待接收 C2。1、 ...原创 2018-03-03 20:31:47 · 1357 阅读 · 0 评论 -
flv的格式
flv封装单元是以tag来表示的,一个tag可以是音频tag或者视频tag,或者脚本tag及其其他类型。一、flv的格式flvheader脚本tag(metadata)第一个视频tag(h264_spspps)第一个音频tag(aac_header)第二个视频tag(h264第一个关键帧)后面就是音频和视频tag交互存在…二、tag的格式:[TYPE] (1b...原创 2018-03-03 20:35:58 · 596 阅读 · 0 评论 -
JS如何调用WebAssembly的api
这里以我之前做的一个项目为例。项目是把ffmpeg编译成WebAssembly文件,然后在js中调用,实现纯前端代码软解码音视频数据。在linux下编译的一、编译ffmpeg生成静态库build_decoder.shecho "Beginning Build:"rm -r distmkdir -p distcd ffmpeg-3.3.3make cleanemconf...原创 2018-03-04 01:08:35 · 37612 阅读 · 23 评论 -
rtmp数据封装四-音频(AAC&G711)
前面文章《rtmp数据封装一-块(chunk)》中讲到rtmp传输媒体数据时是把一整帧数据拆分成chunk的形式发送的。其实一帧媒体数据在拆分成chunk之前还需要进行必要的头部信息封装,本文介绍rtmp协议中AAC/G.711音频数据的头部信息封装。第一个byte包含音频的编码参数:1-4bit: audioCodeId5-6bit: 采样率 00 5.5KHZ, 01 11...原创 2018-08-21 00:18:08 · 4851 阅读 · 5 评论
分享