音视频
文章平均质量分 60
原总破局
刻意训练,积极反馈。
展开
-
音频相关问题
音频、pcm、ffmpeg原创 2022-08-26 23:49:39 · 727 阅读 · 0 评论 -
MP4的播放
昨天一个同事,问了一个我回答不上来的问题。mp4是如何进行点播的?我一下子就蒙了,流是怎么拉流的呢?是通过什么协议,rtmp还是http?我咨询了行业的前辈,mp4的拉流是通过http的。那么mp4是一个整个文件,并不像m3u8有个一个配置文件记录了每一段对应的拉流地址。那么mp4是如何实现拉流播放的呢?我了解的很肤浅,那么我这里截取了别人的总结MP4 主要作用是可以实现快进快放,边下载边播放的效果mp4相关的格式3GP,M4VMP4每一段内容,都可以变成一个对象,如果.原创 2021-12-16 11:08:04 · 1974 阅读 · 0 评论 -
音视频基础学习感悟
从2021年3月23日开始到2021年4月21日,整整30天学完了李超老师的音视频基础课程。算是阶段性的胜利吧!在学习的过程中,我体会到了输出的重要性。我把我自己的学习心得,总结成了笔记发在了CSDN上。每个文字的写出,说明自己的理解就会多一点。在写的过程中,我建立了自信。没有写的时候,各种焦虑。现在每天都在学习,都在写,都在输出内心变得异常平静。对于公司的人员优化也看的很淡,突然之间看的很开了。你优化掉我,我可以找到更好的。在学习的过程中,我逐渐觉得我要把公司淘汰掉了。接下来的目标是:学习原创 2021-04-21 17:13:04 · 317 阅读 · 1 评论 -
CDN ---------------40
什么是CDN网络?CDN(Content Delivery Network)即内容分发网络 最初的目的是解决静态页面的加速问题(静态网页放在不同的服务器上,加快不同用户的访问速度) 通过就近接入方法解决用户访问网络资源的问题阿里云真实的直播架构...原创 2021-04-21 17:03:23 · 83 阅读 · 0 评论 -
SRS集群部署 --------39
SRS集群部署Encoders 是推流终端Players 是拉流终端SRS Edge 边源节点 每个省 每个运营商都有自己的边源节点。理论上每个地区的人连接自己地区的运营商速度最快。SRS Orgin Cluser 源站点Nginx cache 点播系统的边源节点Storage 存储系统CDN 云StreamCaster流程 :1、北京推流,上海拉流北京推流到边源节点,然后再推流到源站点,源站点再进行分发。源站点再推流到上海的边源节点,上海的用户再..原创 2021-04-21 15:06:36 · 1288 阅读 · 0 评论 -
RTMP的URL与Vhost--------38
RTMP URLrtmp://192.168.1.10:1935/Live/streamrtmp 协议192.168.1.10:1935 host:portlive: applicationstream: 流的名称Vhost支持多客户支持多配置域名调度rtmp://vhost/Live/StreamVhost配置listen1935;vhost show.cctv.cn{}vhost show.shanxi.cn{}...原创 2021-04-20 14:55:00 · 358 阅读 · 0 评论 -
本机搭建SRS服务器--------37
SRS ------Simple Rtmp ServerSRS是单进程实现的,在同一个服务器上可以启动多个进程进行同时服务。实际上SRS并不简单。常用在运营级的互联网直播服务器集群;他提供了非常丰富的接入方案,支持RTMP, HLS, HTTP-FLV等。要想实现运营级别必须保证99.99%,保证72小时不间断。 Feature SRS NGINX CRTMPD FMS(Adobe) .原创 2021-04-20 14:34:30 · 714 阅读 · 1 评论 -
本机搭建RTMP服务器--------35
搭建流媒体服务器准备流媒体服务器(Linux或mac) 编译并安装nginx开发 配置RTMP服务并启动RTMP下载nginx源码:http://nginx.org/en/download.html选择最新版本即可。下载nginx-rtmp-module地址https://github.com/arut/nginx-rtmp-module 选择最新版本即可。下载完成后进行解压.通过 tar -zxvf xxxxxx 命令./config...原创 2021-04-19 15:59:19 · 3035 阅读 · 0 评论 -
音视频直播架构---------34
简单来说就是采集音视频后,通过RTMP流媒体协议推送到流媒体服务器上。直播产品的种类:泛娱乐化的直播 花椒 映客 ,还有斗鱼等游戏直播 实时互动直播 使用RTP推流,底层使用的是UDP。包括音视频会议,教育直播等。 使用的主流技术是WebRtc常见的泛娱乐化直播的协议 rtmp hls http-flv 下面是泛娱乐化直播的架构信令服务器:在娱乐化直播中包括了创建房间,聊天,送礼物等流媒体云:大量的流媒体服务器集群,用户可以无限扩展。推流段如果想推流原创 2021-04-19 15:17:08 · 124 阅读 · 0 评论 -
推流阶段性总结-----33
原创 2021-04-17 16:27:44 · 59 阅读 · 0 评论 -
视频阶段性总结-----32
原创 2021-04-17 14:12:20 · 105 阅读 · 0 评论 -
FLV(2) ------FLV实战
我们上一节讲了FLV格式具体结构,今天我们通过librtmp进行推流来实战。准备工作:我们使用Xcode进行代码编写。本文要使用到librtml库,我们要安装下。brew install rtmpdump安装成功以后,我们通过pkg-config --libs --cflags librtmp发现依赖于opensslbrew install openssl安装成功后执行下面命令完成环境变量设置export PKG_CONFIG_PATH=$(find /usr/local/.原创 2021-04-16 17:59:46 · 378 阅读 · 0 评论 -
mac 编译源码 安装 查库
mac编译源码与安装我们以openssl为例。从github上下载压缩文件https://github.com/openssl/openssl 解压缩 tar zxvf xxxxx.tar.gz ./configure --prefix=/usr/local/Cellar/openssl sudo make sudo make install 最关键的一步export PKG_CONFIG_PATH=$(find /usr/local/Cellar -...原创 2021-04-15 18:02:01 · 270 阅读 · 0 评论 -
FLV(1) ------FLV协议
FLV与RTMP关系密切,你甚至可以认为FLV就是RTMP。FLV与RTMP的区别?RTMP加一个头tag就成了FLV我们现在分析下FLV的协议FLV包括FLV Header和数据两部分我们先分析FLV Header,FLV Header有九个字节。我们来分析下1-3字节表示当前是‘F’ 、'L'、‘V’4字节表示当前的flv版本号5字节:具体表示为1-5位为0,6位代表存在音频,7位保留位是0, 8位代表存在视频6-9字节:代表header的大小,目前数值为9.原创 2021-04-15 17:49:38 · 281 阅读 · 0 评论 -
RTMP(2)---------RTMP消息结构
RTMP是由RTMP Header 和RTMP Body组成的。RTMP Header 包括 Basic Header, Message Header, Extened TimeStampBasic HeaderBasic Header的第一个字节分为两部分fmt(占2位)和后面的数字x(占6位)如果x是0 就在增加一个字节CSID,标识的范围是2^6 -------2^6 + 2^8如果x是1 就在增加3个字节CSID1 CSID2 CSID3,标识的范...原创 2021-04-14 15:16:03 · 262 阅读 · 0 评论 -
RTMP(1)---------RTMP流程
RTMP协议应用范围:娱乐直播的传输和点播协议HLS 是由苹果公司推出的,用来替换RTMP协议。但由于前期各个厂家的投入。替换的可能性微乎其微。RTMP相对于HLS 的效率和实时性上要高很多。RTMP依赖于TCP协议。TCP三次握手第一次握手:client发送给server一个SYN信息,序号为J第二次握手:server收到SYN J后,发送一个ACK(应答) J+1和一个SYNK第三次握手:client收到SYNK和ACKJ+1后,client发送一个ACK..原创 2021-04-14 11:54:51 · 379 阅读 · 0 评论 -
H264(9)---------h264面试题
为什么要有YUV这种数据出来?(YUV相比RGB来说的优点)1、yuv除了yuv444外,其他格式比如yuv422 yuv420 yuv411都要比rgb格式占的空间下。Yuv444 和rgb占的空间一样大。Yuv422 = y + u+ v = y + y/2 + y/2 = 2y,比rgb小1/3Yuv420 = y + u + v = y + y/2/2 + y /2/2 = 1.5y ,比rgb 小1/2Yuv411 = y + u + v = y + 1/4y + 1/4...原创 2021-04-13 14:27:55 · 1177 阅读 · 0 评论 -
h264(8)---------------x264参数
预设值preset fast/slow--preset的参数主要调节编码速度和质量的平衡,有ultrafast、superfast、veryfast、faster、fast、medium、slow、slower、veryslow、placebo这10个选项,从快到慢--tune的参数主要配合视频类型和视觉优化的参数,或特别的情况。如果视频的内容符合其中一个可用的调整值又或者有其中需要,则可以使用此选项,否则建议不使用(如tune grain是为高比特率的编码而设计的)。tun...原创 2021-04-12 20:37:39 · 344 阅读 · 0 评论 -
h264(7)---------------h264实战
以教为学,持续输出,才能学会新东西。本文对前面所讲内容进行回顾、总结与实践。我们实现一个使用ffmpeg从mac电脑摄像头采集数据并编码为h264的程序(windows,linux等平台也类似)。流程图如下第一步 打开设备我们结合代码进行分析AVFormatContext* open_dev(){ int ret = 0; char error[1024] = {0, }; AVFormatContext* format_context = ..原创 2021-04-12 19:22:26 · 686 阅读 · 0 评论 -
H264(6)---------PPS, Slice Header
下图是每个pps参数的含义我们结合ElcardStreameEye来查看pic_parameter_set_id:定义了图片参数集,取值范围是0-255.这个值在slice header中也有定义seq_parameter_set_id: 序列参数集,取值范围0-31.entropy_coding_mode_flag:指定熵编码方法(用于无损压缩)num_slice_groups_minus1 :定义了每一帧的分片数量,从图中可以知道每一帧是1weighted_pred_fl原创 2021-04-10 11:43:55 · 222 阅读 · 0 评论 -
H264(5)---------SPS
SPS字段很多,我们重点讲解 PROFILE,LEVEL,pic_width_in_mbs_minus1,pic_heigh_in_mbs_minus1,frame _mbs_only_flag,log2_max_frame_num_minus4,max_num_ref_frames,pic_order_cnt_type,帧率计算PROFIL...原创 2021-04-09 16:14:11 · 419 阅读 · 0 评论 -
H264(4)---------h264码流
H264码流分为两层NAL层和VCL层。什么是NAL层呢?NAL英文全称Network Abstraction Layer,视频数据网络抽象层。这一层的作用是将视频数据进行封装便于在网络上进行传输。能够处理丢包,乱序等网络传输问题。在结构方面NAL层就是一个字节NAL Header。什么是VCL层?VCL英文全称Video Codeing Layer,视频数据编码层。这一层就是通过帧间编码,帧内编码,无损压缩形成的真实视频数据。VCL结构关系图1图1中展示了VCL的结构关系.原创 2021-04-08 20:49:07 · 248 阅读 · 0 评论 -
H264(3)---------帧间压缩
GOP 是一组强相关的帧。帧间压缩一定是在一个GOP当中进行压缩。参考帧后面的帧要参考前面的帧进行编码。运动估计(宏块匹配 + 运动矢量)通过宏块匹配的方法,找到运动矢量。两个帧之间,通过宏块之间的对比,来发现相关的宏块运动到了什么地方,就是运动矢量。运动补偿找到残差值,解码时候把残差值给补上。通过下面的图来描述帧间压缩:我们来看一下例子,下面是捕获的一组运动的台球的视频帧,台球从右上角滚到了左下角。H264编码器会按顺序,每次取出两幅相邻的帧进行宏块比.原创 2021-04-08 16:35:38 · 342 阅读 · 0 评论 -
H264(2)---------帧内压缩
帧内压缩理论 相邻像素之间的差别很小,所以可以进行宏块预测 人们对亮度的敏感度超过色度 YUV很容易将亮度和色度分开 用像素点进行预测效率太低,所以要用宏块进行预测。相邻宏块之间差别也不大。帧内压缩是将帧内预测的数据+预测和原图对比的残差值进行压缩。帧内预测h264提供了九种预测方式以当前宏块为基础,相邻宏块会根据当前宏块选择最适合的预测模式进行预测。只要知道当前宏块的模式,就能知道当前宏块的预测值。亮度块和色图块是单独预测的...原创 2021-04-08 15:57:28 · 303 阅读 · 0 评论 -
H264(1)
H264的压缩比?条件:1、YUV格式为YUV4202、分辨率为640x4803、帧率为15码率为 640 * 480 * 1.5 * 15 = 6912000字节由于网络传输的是bit 所以bit率= 6912000 * 8 = 55296000 bit = 55MH264建议的码率是500k我们可以得到压缩比约1/100H264建议的码率500K不是算出来的,而是经验总结我们可以查看声网的说明https://docs.agora.io/cnht..原创 2021-04-07 20:31:42 · 646 阅读 · 0 评论 -
视频基础YUV/RGB
要想对视频进行编解码,我们必须明白视频的一些基础知识。什么是视频?由一组图像组成 为了便于在网络传输和存储而进行压缩 最终在设备上显示(没有被压缩)什么是图像?图像是由像素组成的。 像素是由RGB组成什么是分辨率?屏幕横向的像素值 * 屏幕纵向的像素值 通常用一个屏幕有多少像素点来描述屏幕的清晰度 每个像素点实际是由3个反光二极管组成,用来表示RED GREEN BLUE 每个像素的位深?RGB888 (24位 每个色值占用8bit) RGBA(32位 A是alp原创 2021-04-06 21:23:18 · 1732 阅读 · 0 评论 -
C语言代码编写原则
1、功能单一2、代码行数控制在50行以内(我曾经只写5行以内,一行定义变量,一行处理数据,一行返回)3、符合C语言风格,单词之间以下划线作为分隔原创 2021-04-05 07:22:09 · 338 阅读 · 0 评论 -
创建AAC编码器
创建编码器的流程图如何创建并打开编码器创建编码器 avcodec_find_encoder(<#enum AVCodecID id#>) 创建上下文 avcodec_alloc_context3(<#const AVCodec *codec#>) 打开编码器 avcodec_open2(<#AVCodecContext *avctx#>, <#const AVCodec *codec#>, <#AVDictionary **opti...原创 2021-04-04 00:13:51 · 895 阅读 · 1 评论 -
音频重采样
什么是音频重采样?将音频的三要素 采样大小(位深)、声道数、采样率更换为另一套值为什么要进行重采样?从设备采集的音频数据和编码器要求的数据不一致; 扬声器要求的音频数据与播放的音频数据不一致; 更方便运算(例如 回音消除总是将多声道转为单声道)。如何知道是否需要重采样?要理解音频设备参数 查看ffmpeg的源码(ffmpeg内置了主流设备的参数)重采样的步骤:创建重采样上下文 设置参数 初始化重采样 进行重采样(对每一帧)重要APIswr_alloc_set_opt原创 2021-04-01 20:37:08 · 636 阅读 · 0 评论 -
音频编码
本文章根据慕课网李超老师的音视频课程和https://blog.csdn.net/ty13392186270/article/details/106993477本文讨论以下几个问题1、为什么音频需要编码?2、音频压缩分为几种?每种压缩的特点?3、如何消除冗余信息?4、什么是频域遮蔽和时域遮蔽?5 无损压缩采用的编码有哪些?哈夫曼树是什么?6、常见的音频编码器?7、AAC编码器?8、ffmpeg生成aac?ffmpeg生成opus1、为什么音频需要编码?录制原创 2021-03-31 14:38:05 · 624 阅读 · 0 评论 -
Mac实现音频采集
如果大家对音频的采集流程不是很了解,可以看我上一篇文章https://blog.csdn.net/qq_15255121/article/details/115301516我们现在mac上xcode创建一个app,如果大家不是很了解怎么创建app。请移步其他教程进行学习。我在这里谈论几个我遇到的问题。1、要想访问音频设备,必须关闭沙盒模式。关闭方式如果还不行要看下如果沙盒为YES要改为NO2要使用麦克风和摄像头必须在info.plist进行说明Privacy - Ca原创 2021-03-29 16:05:05 · 1519 阅读 · 2 评论 -
音频采集
今天我们来谈论下如何在进行音频采集。系统多种多样电脑上的系统有mac,windows,linux。手机系统有android,ios等。如果我们使用每种系统的音视频函数进行采集,成本会很大。ffmpeg已经为我们封装了相应的api。今天我们讲一下,音频的采集流程和相应的api。最后我们通过一个例子来实现音频的采集。音频采集的流程简单来说如下图用ffmepg描述上面的流程可以下面流程图描述 ...原创 2021-03-29 15:14:58 · 1344 阅读 · 0 评论 -
android ndk静态注册
我们要进行android ndk开发要从android studio创建一个c++项目1、2、3一路nexta 定义自己的native方法package com.yuanxuzhen.testnative;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.TextView;.原创 2021-03-26 15:24:24 · 276 阅读 · 0 评论 -
android ndk动态注册
android的ndk开发需要一个桥梁jni,来将java和c/c++联系起来。分为动态注册和静态注册。我们先来谈论一下如何进行动态注册1、写java端的代码package com.yuanxuzhen.testnative;public class JNIDynamicLoad { static { System.loadLibrary("dynamic-lib"); } public native int sum(int x, int y)原创 2021-03-26 14:50:21 · 254 阅读 · 2 评论 -
音视频基础
今天我们解决以下问题本文根据李超老师的音视频基础课程总结而来。1、直播客户端的处理流程是什么?2、音频的处理流程是什么?3、声音是如何产生的?4、人类的听觉范围是多少?5、声音三要素?6、模数转换?7、音频原始数据?8、WAV header?1、直播客户端的处理流程是什么?2、音频的处理流程是什么?编码1、设备采集到的数据是模拟信号,转化为数字信号后生成pcm数据。2、pcm数据进过编码压缩后生成aac/mp33、...原创 2021-03-24 11:39:23 · 827 阅读 · 1 评论