- 博客(48)
- 收藏
- 关注

原创 WEBRTC浅析(九)带宽估计算法之BBR
带宽估计算法之BBRBBR带宽估计 (Bottleneck Bandwidth and Round-trip propagation time)参考文档:https://datatracker.ietf.org/doc/html/draft-cardwell-iccrg-bbr-congestion-control参考文档:https://www.ietf.org/proceedings/98/slides/slides-98-iccrg-an-update-on-bbr-congestion-con
2022-05-06 22:30:40
3073

原创 WEBRTC浅析(二) ICE 机制简介及STUN通信流程
WEBRTC ICE 简介在这里,我会介绍一下WEBRTC 中, ICE 的机制。主要分为三个部分。第一部分,为ICE的协议部分介绍。第二部分,为STUN 的信令连接图。第二部分,为WEBRTC中代码的实现流程。一:ICE协议简析ICE协议 RFC1.1 Overview of ICE +-------+ ...
2018-08-22 20:40:28
13094

原创 WEBRTC浅析(一) H264 RTP接收数据流小结
WEBRTC 接收H264 RTP数据流小结 这篇文章是对webrtc 中,接收H264 RTP包的一个总结,主要分为两个部分: 第一部分,介绍H264打包成RTP包的规范,以及WEBRTC中目前正在使用的几种格式。 第二部分,介绍WEBRTC的数据流,从接收RTP包,到拼装成H264 Frame,最终送入Decoder,获取YUV数据。第一部分:RTP Payloa...
2018-08-05 09:14:54
5117
原创 解读卡尔曼滤波
解读卡尔曼滤波一:统计学的基础均值和期望值均值 Mean 和 期望值 Expected Value 是两个相似但不相同的概念。均值 Mean比方说我们有5枚硬币:2枚5分和3枚10分。我们很容易就能计算出它们的均值。μ=1N∑n=1NVn=15(5+5+10+10+10)=8分μ= \frac{1}{N} \sum _{n=1}^{N}V_{n}= \frac{1}{5} \left( 5+5+10+10+10 \right) = 8分μ=N1∑n=1NVn=51(5+5+10+
2022-05-27 20:29:12
766
原创 WEBRTC浅析(十)拥塞控制算法的演化历史
WEBRTC浅析(十)拥塞控制算法的演化历史评价拥塞控制算法的三个标准:充分利用网络带宽将数据丢失和延迟降至最低在所有连接中保持公平这三个目标之间存在明确的权衡。尽管您想充分利用网络带宽,但您不想过冲,因为这会导致数据丢失。您可以不惜一切代价优先考虑公平性,但这可能会导致您未充分利用网络带宽。一:TCP(1974)中的拥塞控制策略基于丢包的带宽估计拥塞窗口TCP 的工作原理:慢启动和拥塞避免慢启动:始时将拥塞窗口设置得非常小,并在每个 RTT 期间加倍以丢包的形式
2022-05-09 22:38:08
913
原创 WEBRTC浅析(八)GCC:: Transport-wide Congestion Control的协议简析
WEBRTC浅析(八)GCC:: Transport-wide Congestion Control的协议简析Transport-wide Congestion Control参考文档:https://tools.ietf.org/html/draft-holmer-rmcat-transport-wide-cc-extensions-01一:SDP协商 a=extmap:5 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-
2021-07-12 10:46:38
1092
原创 WEBRTC浅析(七)GCC之Receiver Estimated Maximum Bitrate的协议简析
WEBRTC浅析(七)GCC:: Receiver Estimated Maximum Bitrate的协议简析接收端的带宽估计 (Receiver Estimated Maximum Bitrate)参考文档:https://tools.ietf.org/html/draft-alvestrand-rmcat-remb-03一:SDP协商a=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time a=
2021-07-11 18:09:33
440
原创 WEBRTC浅析(六)拥塞控制GCC的简介以及WEBRTC中的实现
GCC 阅读笔记导读本文分为两部分:第一部分介绍了谷歌的GCC的文档。其中主要介绍了GCC的各个模块,以及具体算法实现。第二部分,结合了webrtc来看GCC各个模块的具体实现。一:GCC(Congestion Control Algorithm)文档介绍原文:Congestion Control Algorithm两种拥塞控制方法基于 RTCWEB的拥塞控制一个基于延迟和损失拥塞控制是对应用程序的所有网络资源的调控。实时流媒体的拥塞控制策略面临的几大挑战:媒体的编
2021-07-11 17:18:41
1520
2
原创 WEBRTC浅析(五)视频Nack包的发送判断逻辑以及数据流
这篇文章是对webrtc 中Nack包发送机制的梳理,主要包括三个部分:第一部分,介绍RTCP包中,Nack包的规范。第二部分,介绍在WEBRTC中,Nack发送机制的数据流程图。第三部分,介绍在WEBRTC中,Nack处理的一些关键的代码。一:RTCP Nack报文解析 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 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-.
2021-07-11 17:11:43
563
1
原创 WEBRTC浅析(四)通过RTCP 报文计算RTT, Jitter以及丢包率
WEBRTC浅析(四)通过RTCP 报文计算RTT, Jitter以及丢包率这篇文章是对webrtc 中,RTT, Jitter以及Nack值 这三种网络状态的变量的统计,主要分为两个部分:第一部分,介绍RTCP的规范,主要包括Send Report,Receive Report。第二部分,介绍在WEBRTC中,它是如何通过RTCP的SR,RR包,计算RTT,Jitter以及Nack。第一部分:The RTP control protocol Format参考链接:rfc6184SR: Se
2021-07-11 17:00:32
3693
1
原创 WEBRTC浅析(三)RTP推送数据流小结
WEBRTC浅析(三)RTP推送数据流小结WEBRTC发送 RTP推送数据流小结这篇文章是对webrtc中,从Capture采集YUV数据,到将YUV编码成H264Frame,再将H264Frame打包成RTP数据包,最终通过发送线程发送出去的流程。RTP数据包的封装格式可以参考:WEBRTC浅析(一) H264 RTP接收数据流小结数据流程VideCapture 采集YUV数据,通过OnFrame接口把YUV发送给ViEEncoder。ViEEncoder收到YUV数据后,会进行一
2021-07-11 16:56:52
932
原创 TCP/IP详解——阅读笔记
TCP/IP详解——阅读笔记第一章:概述框架:* 应用层:FTP EMAIL* 传输层:TCP UDP* 网络层:IP* 链路层:网卡域名系统( D N S)是一个分布的数据库,由它来提供 I P地址和主机名之间的映射信息封装分用为协议I C M P和I G M P定位一直是一件很棘手的事情。在图1 - 4中,把它们与I P放在同...
2018-07-01 16:09:06
619
原创 在FFMPEG中新增Filter
此处以vf_overlaygl 模块为例:1:生成vf_overlaygl模块参照vf_overlayer.c ,编写vf_overlaygl.c。2:修改Allfliters.c 增加 REGISTER_FILTER(OVERLAYGL, overlaygl, vf); 这个修改会在执行./configure ,生成config.h和config.mak的
2017-05-04 14:07:07
1578
原创 FFMPEG Android(4)打开Android硬件编码
1:在编译时enable mediacodec 相关功能。function build_ffmpeg{./configure \--prefix=$PREFIX \--pkg-config-flags="--static" \--extra-libs="-lgcc" \--extra-cflags="-I$PREFIX/include -static" \--extra-ldf
2017-03-10 14:21:16
3213
原创 FFMPEG Android (3) enable libx264
1:下载X264git clone http://git.videolan.org/git/x264.git2:编写X264编译脚本这里附上我的编译脚本#!/bin/bashexport TMPDIR=/Users/aivensmac/work/project/ffmpeg/armbuild/tmpNDK=/Users/aivensmac/Library/And
2017-02-16 22:01:51
938
原创 FFMPEG Android(2) 编译编译静态ffmpeg可执行文件
如果想编译静态ffmpeg可执行文件,编译脚本如下:#!/bin/bashexport TMPDIR=/Users/aivensmac/work/project/ffmpeg/armbuild/tmpNDK=/Users/aivensmac/
2017-02-16 17:49:03
1970
原创 FFMPEG Android(1) 编译
1:下载ffmepggit clone https://git.ffmpeg.org/ffmpeg.git ffmpeg2:打开 configure, 需改一下代码,这样编译出来的so,版本号会再加在.so前面。将SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'LIB_INSTALL_EXTRA_CMD='$$(RA
2017-02-16 16:25:29
830
原创 tensor flow在mac下的编译与安装
Mac OS X 安装1:安装Bazel1. Install Homebrew on Mac OS X (one time setup)$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"2. Insta
2016-06-07 15:17:09
8007
1
转载 ReferenceTable overflow 问题汇总
ReferenceTable overflow 问题汇总JNI层coding经常会遇到ReferenceTable overflow问题,特别是当jni函数被反复调用上千上万次的时候,现汇总如下,未完待续,并欢迎补充,(*^__^*) 嘻嘻……总体原则:释放所有对object的引用1.FindClass 例如,jclass ref= (env)->FindClass("
2016-05-04 17:42:30
830
转载 使用NDK编译的时候出现 undefined reference to
最近一段时间在使用NDK进行编译的时候一直出现undefined reference to的问题代码写的没有问题, 在visual studio中也能找到定义, 可是在NDK中就是出现这个问题过不去.使用nm, objdump 查看.o文件也是发现就是那几个函数未定义;多番GOOGLE之下 找到了问题所在解决问题: 在Android.mk中加入 LOCAL_AL
2016-04-23 12:00:33
1521
转载 I 帧和 IDR 帧的区别
I 帧和 IDR 帧的区别: IDR 帧属于 I 帧。解码器收到 IDR frame 时,将所有的参考帧队列丢弃 (用x264_reference_reset 函数实现——在 encoder.c 文件中) 。这点是所有 I 帧共有的特性,但是收到 IDR 帧时,解码器另外需要做的工作就是:把所有的 PPS 和 SPS 参数进行更新。由此可见,在编码器端,每发一个 IDR ,就相
2016-04-18 10:12:00
723
转载 H264码流结构分析
1、码流总体结构:h264的功能分为两层,视频编码层(VCL)和网络提取层(NAL)。H.264 的编码视频序列包括一系列的NAL 单元,每个NAL 单元包含一个RBSP。一个原始的H.264 NALU 单元常由 [StartCode] [NALU Header] [NALU Payload] 三部分组成,其中 Start Code 用于标示这是一个NALU 单元的开始,必须是"00 00
2016-04-18 09:11:50
1029
原创 ijkplayer整理笔记(五)——用add2line定位crash问题
调试步骤:一:在ndk目录中找到add2line工具我的目录是: /Users/aiven/Library/Android/sdk/ndk-bundle/toolchains/arm-linux-androideabi-4.8/prebuilt/darwin-x86_64/bin/arm-linux-androideabi-addr2line为了方便使用,将此目录加入环境变量
2016-04-15 17:49:56
3133
原创 ijkplayer整理笔记(三)——AVFormatContext类图详解类图详解
AVFormatContext是ffmpeg中很重要的一个类,下图是一个对它分解:AVInputFormat:用于输入的一个类,对应播放的输入流。AVOutputFormat: 输出流AVIOContext: 控制io的类。如果是local文件,则对应的是文件handler。如果是流媒体,则包括对应的流媒体协议,比如hls,rtmp等。AVStream:对应track的信息。
2016-03-28 11:07:22
2234
原创 ijkplayer整理笔记(二)——ffplayer流程解析
纯干货:最近在看ijkplayer,顺便就把他的ffmplayer流程整理一下,就当作对自己看代码的总结吧。在这里我只是梳理了一下整个ffplayer的框架,顺着这个框架,再去看代码就会清晰明了很多。和大多数player一样,ffplayer有一个独立的read_thread读取数据,有一个独立的audio_thread用于解码音频数据以及render。另外video_thread用于
2016-03-10 11:13:11
5911
原创 ijkplyaer编译脚本分析(二)——compile-ffmpeg.sh
compile-ffmpeg.sh#! /usr/bin/env bash## Copyright (C) 2013-2014 Zhang Rui ## Licensed under the Apache License, Version 2.0 (the "License");# you may not use this file except in comp
2016-03-08 10:32:27
2913
原创 ijkplayer编译脚本分析(一)——init-android.sh
init-android.sh# IJK_FFMPEG_UPSTREAM=git://git.videolan.org/ffmpeg.gitIJK_FFMPEG_UPSTREAM=https://github.com/Bilibili/FFmpeg.gitIJK_FFMPEG_FORK=https://github.com/Bilibili/FFmpeg.gitIJK_
2016-03-08 10:17:33
2667
1
原创 ijkplayer 整理笔记(1)——下载并编译
### Build Android1:下载git clone https://github.com/Bilibili/ijkplayer.git ijkplayer-androidcd ijkplayer-androidgit checkout -B latest k0.4.5.12:编译./init-android.shcd android/contrib
2016-03-04 18:11:30
1714
原创 ngnix开发(五)将rtmp直播流转换成hls直播流
1:修改/usr/local/nginx/conf/ngnix.conf,红色字体为添加内容。#rtmp直播配置 server { listen 1936; chunk_size 4000; application live { live on; hls on;
2016-03-01 19:38:00
15616
2
原创 nginx开发(四)调用ffmpeg,搭建rtmp直播流。
1: 修改conf文件,配置rtmp直播打开usr/local/nginx/conf/nginx.conf,添加红色内容:rtmp {#rtmp点播配置 server { listen 1935; chunk_size 4000; application vod { play /usr/
2016-03-01 15:30:29
1304
原创 nginx开发(三)搭建rtmp点播系统
1:/在 /usr/local/nginx/html/ 目录下创建了multimedia/rtmp2:拷贝文件1.flv到目录下3:打开usr/local/nginx/conf/nginx.conf,修改如下rtmp {#rtmp点播配置 server { listen 1935; chunk_size 4000; a
2016-03-01 15:15:22
1211
原创 nginx开发(二)配置mp4文件在线播放
1: 第一步先开打nginx的文件夹遍历功能vi /usr/local/nginx/conf/nginx.conf #编辑配置文件,在http {下面添加以下内容:autoindex on; #开启nginx目录浏览功能autoindex_exact_size off; #文件大小从KB开始显示autoindex_localtime on; #显示文件修改时间为服务器本地时间
2016-02-26 16:01:53
18145
5
原创 nginx开发(一) 源码-编译
1:获取源码http://nginx.org/download/nginx-1.8.0.tar.gz2:编译解压之后,进入根目录,执行./configuer.shmakemake install3:nginx执行编译完之后,可以进入 /usr/local/nginx目录。执行 ./nginx -v,就会看到 nginx version
2016-02-26 14:17:43
938
原创 VLC——Android小结(1)----编译
写这个还是主要还是为了对自己近期的工作做一些总结,希望可以把自己对vlc理解都总结下来。1)准备编译环境下载ndk和sdk,设置环境变量export ANDROID_SDK=/path/to/android-sdkSet $ANDROID_NDK to point to your Android NDK directoryexport ANDROID_ND
2014-11-23 15:32:38
1015
转载 shell的字符串处理
#!/bin/bash############################################ 演示bash中操作字符串的操作## 后面是输出结果###########################################str="abc123abcABC"# |-|# |-------|#计算字
2011-06-18 13:42:00
578
原创 JAVA listiterator
package com.listtest.test; import java.util.ArrayList; import java.util.ListIterator;import java.util.List; public class list { public static void main(String[] args) {
2011-06-08 12:58:00
876
原创 “android list targets 无target显示” 的解决方法。
If youre getting started with the Android SDK and encounter an error message which says "Error: Target id is not valid. Use android list targets to get the target ids" heres how to solve it
2011-06-04 23:56:00
10540
转载 GIT和repo使用方法
Git 是 Linux Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的分布式版本控制软件,它不同于Subversion、CVS这样的集中式版本控制系统。在集中式版本控制系统中只有一个仓 库(repository),许多个工作目录(working copy),而像Git这样的分布式版本控制系统中(其他主要的分布式版本控制系统还有BitKeeper、
2011-06-04 12:08:00
979
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人