Skip to content

Instantly share code, notes, and snippets.

View yishengma's full-sized avatar

海盗的帽子 yishengma

  • Shenzhen
View GitHub Profile
@yishengma
yishengma / mobile_live_streaming.md
Created October 9, 2019 08:10 — forked from Akagi201/mobile_live_streaming.md
[移动直播技术分享]

###1. 推流端 直播技术的流程大致可以分为几个步骤:数据采集、数据处理、视频编码、封包发送、云端(服务端)(转码、录制、分发)、播放器。

  1. 数据采集:通过摄像头和麦克风获得实时的音视频数据;
  2. 数据处理:将数据采集的输入流进行实时滤镜,得到我们美化之后的音视频数据, 视频包括各种处理滤镜,美颜,动态贴纸等, 音频包括降噪, 放大等处理;
  3. 音视频编码:编码分为软编码和硬编码。现在直播默认的编码都是 H.264。软编码是利用 CPU 进行编码,硬编码就是使用 GPU 进行编码。软编码支持现在所有的系统版本。由于苹果在 iOS8 才开放硬编码的 API,故硬编码只支持 iOS8 以上的系统;
  4. 封包发送:现在直播推流中,一般采用的格式是 FLV , 然后利用 ffmpeg 或者 librtmp 进行传输, 这两者封包的处理是不一样的,我们采用的是 ffmpeg , 所以没有对 librtmp 进行深入的研究;
  5. 云端(服务端):进行流的转码、分发和录制;
  6. 播放器:负责拉流、解码、播放。
@yishengma
yishengma / mobile_live_streaming.md
Created October 9, 2019 08:10 — forked from Akagi201/mobile_live_streaming.md
[移动直播技术分享]

###1. 推流端 直播技术的流程大致可以分为几个步骤:数据采集、数据处理、视频编码、封包发送、云端(服务端)(转码、录制、分发)、播放器。

  1. 数据采集:通过摄像头和麦克风获得实时的音视频数据;
  2. 数据处理:将数据采集的输入流进行实时滤镜,得到我们美化之后的音视频数据, 视频包括各种处理滤镜,美颜,动态贴纸等, 音频包括降噪, 放大等处理;
  3. 音视频编码:编码分为软编码和硬编码。现在直播默认的编码都是 H.264。软编码是利用 CPU 进行编码,硬编码就是使用 GPU 进行编码。软编码支持现在所有的系统版本。由于苹果在 iOS8 才开放硬编码的 API,故硬编码只支持 iOS8 以上的系统;
  4. 封包发送:现在直播推流中,一般采用的格式是 FLV , 然后利用 ffmpeg 或者 librtmp 进行传输, 这两者封包的处理是不一样的,我们采用的是 ffmpeg , 所以没有对 librtmp 进行深入的研究;
  5. 云端(服务端):进行流的转码、分发和录制;
  6. 播放器:负责拉流、解码、播放。
!function(n){"use strict";function t(n,t){var r=(65535&n)+(65535&t);return(n>>16)+(t>>16)+(r>>16)<<16|65535&r}function r(n,t){return n<<t|n>>>32-t}function e(n,e,o,u,c,f){return t(r(t(t(e,n),t(u,f)),c),o)}function o(n,t,r,o,u,c,f){return e(t&r|~t&o,n,t,u,c,f)}function u(n,t,r,o,u,c,f){return e(t&o|r&~o,n,t,u,c,f)}function c(n,t,r,o,u,c,f){return e(t^r^o,n,t,u,c,f)}function f(n,t,r,o,u,c,f){return e(r^(t|~o),n,t,u,c,f)}function i(n,r){n[r>>5]|=128<<r%32,n[14+(r+64>>>9<<4)]=r;var e,i,a,d,h,l=1732584193,g=-271733879,v=-1732584194,m=271733878;for(e=0;e<n.length;e+=16)i=l,a=g,d=v,h=m,g=f(g=f(g=f(g=f(g=c(g=c(g=c(g=c(g=u(g=u(g=u(g=u(g=o(g=o(g=o(g=o(g,v=o(v,m=o(m,l=o(l,g,v,m,n[e],7,-680876936),g,v,n[e+1],12,-389564586),l,g,n[e+2],17,606105819),m,l,n[e+3],22,-1044525330),v=o(v,m=o(m,l=o(l,g,v,m,n[e+4],7,-176418897),g,v,n[e+5],12,1200080426),l,g,n[e+6],17,-1473231341),m,l,n[e+7],22,-45705983),v=o(v,m=o(m,l=o(l,g,v,m,n[e+8],7,1770035416),g,v,n[e+9],12,-1958414417),l,g,n[e+10],17,-42063),m,l,n[e+11],22,-1990404162),v=o(v