
1音视频播放原理介绍
音视频技术主要包含以下几种:封装技术,视频压缩技术,音频压缩技术,流媒体协议技术以及防盗链技术。接下来的几篇文章将对这几种技术做深入的研究和实践。下面简单说明一下视频播放的原理(以播放互联网上的视频为例):

服务器端的视频数据通过流媒体协议下载到客户端,依次会经过以下的过程:
1解协议:将流媒体协议的数据解析为相应的封装格式数据,比如RTMP协议解析后得到flv,HLS协议解析后得到ts。流媒体协议在音视频传输的同时,还会包含一些其他的数据,比如RTMP协议会包含一些信令数据,这些信令数据包括对播放的控制(暂停,播放,停止等),或者是对网络状态的描述。HLS协议中会包含索引文件等等。解协议的过程就是只保留音视频数据,去除掉其他的数据。
2解封装:经过解协议过程,得到视频的封装格式数据后,解封装过程会将其分离成为某种编码格式的音频压缩数据和某种编码格式的视频压缩数据,有的可能还包括字幕和脚本。例如:flv或ts格式的数据,解封装后得到H264编码的视频码流和AAC编码的音频码流。
3解码:解封装过程完毕后,分别得到压缩的视频码流和音频码流,解码的过程就是将压缩(编码)后的音视频数据解压,得到系统音频驱动和视频驱动能够识别的音频采样数据(如PCM数据)和视频像素数据(如YUV420P,RGB)。
4视音频同步:根据时间,帧率和采样率采用一定的算法,同步解码出来的视频和音频数据,并将视频音频数据送至显卡和声卡播放出来。
视频编码有几种方式:
1硬编码,使用MediaCodec实现
2软编码,使用FFmpeg或者libx264库来实现。
本文分享在Android平台视频编码-软编码的实现,也就是用FFmpeg来实现视频的编码,rtmp推流到服务器上,相机采集视频将在下一篇文章分享。
流媒体服务器使用 nginx-rtmp-module 来进行搭建。
本文所使用FFmpeg的版本是41,关于FFmpeg编译成Android平台so库如果有需要,我将在下一篇文章分享说明。
视频编码比较耗cpu,上传视频数据的会耗网络io,所以需要开启新线程去处理,这里我用HandlerThread来处理视频的编码上传。
初始化编码相关 *** 作
这里我们使用的是FFmpeg,所以在编码前我们会先做一些初始化以及参数设置工作。
FFmpeg初始化
av_register_all()
创建输出格式上下文
avformat_alloc_output_context2()
获取编码器
avcodec_find_encoder(AV_CODEC_ID_H264) 获取H264的编码器
设置编码器参数
使用给定的编码器和参数初始化编码上下文
avcodec_open2(pCodecCtx, pCodec, ¶m)
创建视频流
video_st = avformat_new_stream(ofmt_ctx, pCodec)
打开输出上下文
avio_open(&ofmt_ctx->pb, out_path, AVIO_FLAG_READ_WRITE)
写入输出头信息
avformat_write_header(ofmt_ctx, NULL)
像素格式转换
AV_PIX_FMT_YUV420P,它是纯平面存储。总共三个平面,分别存放,Y、U、V数据。
当图像宽是width,高是height时,Y分量的大小就是width×heitht,而U是width×heitht/4,V也是U是width×heitht/4。
H264编码
首先我们需要了解两个数据结构AVFrame、AVPacket
AVFrame存放的是原始数据、AVPacket存放的是编码后的数据。
创建AVPacket
av_new_packet(&enc_pkt, picture_size);
开始编码
ret = avcodec_encode_video2(pCodecCtx, pFrameYUV);
输出一帧编码后的视频数据
ret = av_write_frame(pCodecCtx, &enc_pkt);
释放资源
小伙伴们有疑问的可以在下方评论区评论。
是RTSP和RTMP网络协议,现在的摄像头都是网络摄像头,IPcam。海康威视支持输出RTSP协议,可以按照海康的RTSP写出他们直接输出的视频流地址,然后通过800li的外部信号适配器软件转接成RTMP进入800li media server进行嵌入网页分发,可以PC,手机和微信公众号进行观看。
一、直播的技术架构:
直播视频采集SDK(PC/IOS/Anddroid)——直播CDN
(直播流分发加速)——直播视频播放器SDK(PC/IOS/Android)
二、音视频处理的一般流程:
数据采集→数据编码→数据传输(流媒体服务器)→解码数据→播放显示
1、数据采集:
摄像机及拾音器收集视频及音频数据,此时得到的为原始数据
涉及技术或协议:
摄像机:CCD、CMOS
拾音器:声电转换装置(咪头)、音频放大电路
2、数据编码:
使用相关硬件或软件对音视频原始数据进行编码处理(数字化)及加工(如音视频混合、打包封装等),得到可用的音视频数据
涉及技术或协议:
编码方式:CBR、VBR
编码格式
视频:H265、H264、MPEG-4等,封装容器有TS、MKV、AVI、MP4等
音频:G711μ、AAC、Opus等,封装有MP3、OGG、AAC等
3、数据传输:
将编码完成后的音视频数据进行传输,早期的音视频通过同轴电缆之类的线缆进行传输,IP网络发展后,使用IP网络优传输
涉及技术或协议:
传输协议:RTP与RTCP、RTSP、RTMP、>
控制信令:SIP和SDP、SNMP等
4、解码数据:
使用相关硬件或软件对接收到的编码后的音视频数据进行解码,得到可以直接显示的图像/声音
涉及技术或协议:
一般对应的编码器都会带有相应的解码器,也有一些第三方解码插件等
5、播放显示:
在显示器(电视、监视屏等)或扬声器(耳机、喇叭等)里,显示相应的图像画面或声音
涉及技术或协议:
显示器、扬声器、3D眼镜等
三、常见的视频直播相关协议:
1、RTMP(RealTimeMessagingProtocol,实时消息传送协议)
RTMP是AdobeSystems公司为Flash播放器和服务器之间音频、视频和数据传输开发的开放协议。它有三种变种:
1)、工作在TCP之上的明文协议,使用端口1935;
2)、RTMPT封装在>
3)、RTMPS类似RTMPT,但使用的是>
RTMP协议是被Flash用于对象、视频、音频的传输。这个协议建立在TCP协议或者轮询>
2、RTSP(RealTimeStreamingProtocol,实时流传输协议)
RTSP定义了一对多应用程序如何有效地通过IP网络传送多媒体数据。RTSP提供了一个可扩展框架,数据源可以包括实时数据与已有的存储的数据。该协议目的在于控制多个数据发送连接,为选择发送通道如UDP、组播UDP与TCP提供途径,并为选择基于RTP上发送机制提供方法。
RTSP语法和运作跟>
3、RTP(Real-timeTransportProtocol,实时传输协议)
RTP是针对多媒体数据流的一种传输层协议,详细说明了在互联网上传递音频和视频的标准数据包格式。RTP协议常用于流媒体系统(配合RTCP协议),视频会议和一键通系统(配合H323或SIP),使它成为IP电话产业的技术基础。
RTP是建立在UDP协议上的,常与RTCP一起使用,其本身并没有提供按时发送机制或其它服务质量(QoS)保证,它依赖于低层服务去实现这一过程。
RTP并不保证传送或防止无序传送,也不确定底层网络的可靠性,只管发送,不管传输是否丢包,也不管接收方是否有收到包。RTP实行有序传送,RTP中的序列号允许接收方重组发送方的包序列,同时序列号也能用于决定适当的包位置,如在视频解码中,就不需要顺序解码。
4、RTCP(Real-timeTransportControlProtocol,实时传输控制协议)
RTCP是RTP的配套协议,为RTP媒体流提供信道外的控制。RTCP和RTP一起协作将多媒体数据打包和发送,定期在多媒体流会话参与者之间传输控制数据。
RTCP的主要功能是为RTP所提供的服务质量(QoS)提供反馈,收集相关媒体连接的统计信息,例如传输字节数,传输分组数,丢失分组数,单向和双向网络延迟等等。网络应用程序可以利用RTCP所提供的信息来提高服务质量,比如限制流量或改用压缩比小的编解码器。
1、网页上的视频都是需要网络连接的,如果网卡,延迟高的话,网页上的视频就无法播放了。可以在测速网进行网速测试,若网速低于1M以下,看视频卡顿,无法正常播放是很正常的。
2、还有一种情况,浏览器未对该网页开启flash权限,会显示要更新flash或者要你打开flash。点击左上角网址前面的符号,点击打开flash权限,刷新一下网页即可。也可以打开浏览器设置,在设置中开启网页Adobe Flash权限。
视频播放基本处理流程
(1)解协议
从原始的流媒体协议数据中删除信令数据,只保留音视频数据,如采用RTMP协议传输的数据,经过解协议后输出flv格式的数据。
(2)解封装
分离音频和视频压缩编码数据,常见的封装格式mp4,mkv,rmvb,flv,avi这些格式。从而将已经压缩编码的视频、音频数据放到一起。例如FLV格式的数据经过解封装后输出H264编码的视频码流和AAC编码的音频码流。
(3)解码
视频,音频压缩编码数据,还原成非压缩的视频,音频原始数据,音频的压缩编码标准包括AAC,MP3,AC-3等,视频压缩编码标准包含H264,MPEG2,VC-1等经过解码得到非压缩的视频颜色数据如YUV420P,RGB和非压缩的音频数据如PCM等。
(4)音视频同步
将同步解码出来的音频和视频数据分别送至系统声卡和显卡播放。
流媒体协议RTMP,RTSP与HLS有什么不同?
HLS (>
以上就是关于音频播放原理全部的内容,包括:音频播放原理、Android平台FFmpeg实现rtmp推流-C++的实现、海康威视监控ptsp或rtmp是什么意思等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)