音视频直播(Java)

1 概述

1.1通用直播总体架构

Java在用于视频开发时主要采用的技术框架是FFmpeg和OpenCV。数据库和其他的功能实现可以使用Java Web的相关技术就可以实现。

FFmpeg主要有两种网络传输协议;RTSP、RTMP

RTSP;实时流传输协议,是TCP/IP协议体系中的一个应用层协议.RTSP在体系结构上位于RTP和RTCP之上,它使用TCP或UDP完成数据传输。

RTMP;实时消息传输协议)的首字母缩写。该协议基于TCP,是一个协议族,包括RTMP基本协议及RTMPT/RTMPS/RTMPE等多种变种。

从上面的简单描述可以看出,这两种协议完全符合808和809协议的。

1.2 视频直播流程

 

 

 

 

 

2 具体实现方案

2.1 图像和声音同步流程

2.2 框架作用说明

OpenCV;

1. 内置数据结构和输入/输出(In-build data structures and input/output)

  关于OpenCV的好处之一就是它提供了许多内置的用于图像处理和计算机视觉相关操作的基础元素。如果你需要通过scratch写入某些内容,你将不得不定义一些东西,比如图像、点、角度等等,这些几乎是任何计算机视觉算法的基础。OpenCV提供了这些开箱即用的基础数据结构,它们都包含在core模块中。另外一个好处是,这些数据结构都已经针对速度和内存做了优化,因此,你不用担心实现细节。

  imgcodecs模块用于处理读取和写入图像文件(image file)。

2. 图像处理操作(Image processing operations)

3. 构建图形用户界面(Build GUI)

4. 视频分析(Video analysis)

5. 3D重建(3D reconstruction)

6. 特征提取(Feature extraction)

7. 目标检测(Object detection)

8. 机器学习(Machine learning)

9. 计算摄影(Computational photography)

10. 形状分析(Shape analysis)

11. 光流算法(Optical flow algorithms)

12. 人脸和目标识别(Face and object recognition)

13. 表面匹配(Surface matching)

14. 文本检测和识别(Text detection and recognition)

FFmpeg;

1、AVUtil: 核心工具库

2、AVFormat:提供了音视频容器格式的封装和解析以及所支持的协议文件格式和协议库

3、AVCodec: 编解码库

4、AVFilter: 音视频滤镜库 如视频加水印、音频变声

5、AVDevice: 输入输出设备库,提供设备数据的输入与输出,如读取摄像头数据、屏幕录制

6、SwrRessample: 音频重采样

7、SWScale: 图像格式转换的模块,yuv -> rgb

8、PostProc:后期处理

3 编解码

3.1编解码流程

编码流程;

1、avformat_alloc_output_context2:

初始化输出码流的 AVFormatContext

2、avio_open:

打开输出文件

3、av_new_stream:

创建输出码流的 AVStream

4、avcodec_find_encoder:

查找编码器。

5、avcodec_open2:

打开编码器

6、avformat_write_header:

写文件头(对于某些没有文件头的封装格式,不需要此函数。比如说 MPEG2TS)

7、avcodec_encode_video2:

编码一帧视频。即将 AVFrame(存储 YUV 像素数据)编码为 AVPacket(存储 H.264 等格式的码流数据)

8、av_write_frame:

将编码后的视频码流写入文件。

9、flush_encoder:

输入的像素数据读取完成后调用此函数。用于输出编码器中剩余的 AVPacket。

10、av_write_trailer:

写文件尾(对于某些没有文件头的封装格式,不需要此函数。比如说 MPEG2TS)。

11、释放资源

解码流程:

1、av_register_all:

先调用avcodec_register_all来注册所有config.h里面开放的编解码器,然后会注册所有的Muxer和Demuxer(也就是封装格式),最后注册所有的Protocol(即协议层的东西)

2、avformat_alloc_context:

分配初始化一个AVFormatContext结构体

3、avformat_open_input:

解码时,根据文件路径判断文件格式,决定使用哪个Demuxer,构建好AVStream

4、avformat_find_stream_info:

解码时,作用是从文件中提取流信,将所有的Stream的MetaData信息填充好,先read_packet一段数据解码分析流数据

5、穷举所有的流,查找其中种类为 CODEC_TYPE_VIDEO

6、avcodec_find_decoder:

作用是找解码器,avcodec_resgister_all已经将解码器和编码器放到一个链表中,根据codec Id和name循环遍历找出

7、avcodec_open2:

avcodec_open2(AVCodecContext, Codec, NULL)

作用是打开编码器或解码器

8、avcodec_alloc_frame:

为解码帧分配内存

9、不停地从码流中提取出帧数据 av_read_frame:

解码时,读取出AVPacket,对应音频流,一个AVPacket可能包含多个AVFrame,对应视频流,一个AVPacket对应一个AVFrame

10、判断帧的类型,对于视频帧调用: avcodec_decode_video:

11、avcodec_close:

释放解码器

12、av_close_input_file:

关闭输入文件

3.2 编解码相关技术

由于我们源程序采用的视频文件格式是flv,所以我这里先以flv的视频文件格式为例。

FFMPEG如果是压缩为FLV文件 3个编码可选

1. -c:v flv 标准FLV编码 这个好处是速度快 清晰度高的话 视频文件会比较大

2. -c:v vp6 VP6编码 这个大家都很少使用 其实这个也算不错

3. -c:v libx264 H.264编码 估计使用这个的比较多 优点是同等清晰度 视频文件更小 缺点就是转换慢的吐血

几种常见的视频编码格式;

首先纠正一下上面说的一个观点,其实mkv和avi并不能说成是高清格式,所谓的高清(High Definition )指的是分辨率达到一定水平之上才称之为高清,像720p、1080i、1080p、a1080、a720、816p 。进行高清视频编码时一般使用的编码格式为H.264、VC-1,而进行封装时可以使用mkv、mp4、avi这类文件格式进行封装。所以mkv、avi只是一种封装格式,里面装的视频如果是一个320x240分辨率的,那这个视频就不是一个高清视频。下面说说这几种格式的特点。

1、mkv:mkv不等同于音频或视频编码格式,它只是为这些进行过音视频编码的数据提供了一个封装的格式,简单的说就是指定音视频数据在文件中如何排列放置。

MKV最大的特点就是能容纳多种不同类型编码的视频、音频及字幕流,俗称万能媒体容器。

MKV加入AVI所没有的EDC错误检测代码,这意味着即使是没有下载完毕的MKV文件也可以顺利回放,这些对AVI来说完全是不可想象的。虽然MKV加入了错误检测代码,但由于采用了新的更高效的组织结构,用MKV封装后的电影还是比AVI源文件要小了约1%,这就是说即使加上了多个字幕,MKV文件的体积也不可能比AVI文件大。

MKV支持可变帧率,它可在动态画面中使用较大的帧率,而在静态画面中使用较小的帧率,这样可以有效的减少视频文件的体积,并改善动态画面的质量。它的作用比目前广泛使用的VBR(可变码率)更为明显。

2、avi   可容纳多种类型的音频和视频流,他的封装格式比较老了,在功能上不能像mkv那样满足更多的需求

3、rmvb  是rm的升级版本,vb代表变比特率,意思是在画面平缓的时候采用低比特率,画面变化剧烈的时候采用高比特率,有效降低文件尺寸,又不影响太多画质。一般来说,一个700MB的 DVDrip 采用平均比特率为450Kbps的压缩率,生成的 RMVB 大小仅为400MB,但是画质并没有太大变化。但是由于编码器的关系,在画质上还是略输于h.264,所以现在压缩高清视频时更偏重于使用mkv封装。

4、mp4   视频MP4格式实际上指的是使用MPEG-4编码格式、或使用MPEG-4衍生出来的编码格式进行编码的文件,比如DivX、XviD、H.263、H.264、 MS MPEG-4 3688 、 Microsoft Video1 、Microsoft RLE,此种文件格式功能不如mkv丰富。

5、flv    FLV文件体积小巧,清晰的FLV视频1分钟在1MB左右,一部电影在100MB左右,是普通视频文件体积的1/3。再加上CPU占有率低、视频质量良好等特点使其在网络上盛行,目前网上的几家著名视频共享网站均采用FLV格式文件提供视频

6、wmv   WMV是微软推出的一种流媒体格式,它是在“同门”的ASF(AdvancedStreamFormat)格式升级延伸来得。在同等视频质量下,WMV格式的文件可以边下载边播放,因此很适合在网上播放和传输。

可是由于微软本身的局限性其WMV的应用发展并不顺利。第一, WM9是微软的产品它必定要依赖着Windows,Windows 意味着解码部分也要有PC,起码要有PC机的主板。这就大大增加了机顶盒的造价,从而影响了视频广播点播的普及。第二,WMV技术的视频传输延迟非常大,通常要10几秒钟,正是由于这种局限性,目前WMV也仅限于在计算机上浏览WM9视频文件。

原文地址:https://www.cnblogs.com/taluo2019/p/10863429.html

时间: 2024-08-18 07:43:40

音视频直播(Java)的相关文章

采用ffmpeg和ffserver实现音视频直播和点播

一.嵌入式开发板采集音视频(远程) 音频采集程序:./audioc -i 222.222.222.222 -p 8888; 视频采集程序:./videoc -i 222.222.222.222 -p 9999; 音频采集程序利用alsa库,采集原始音频帧,发送至服务器进程(222.222.222.222,  8888); 视频采集程序利用v4l2库,采集原始视频帧,h.264硬编码后,发送至服务器进程(222.222.222.222, 9999); 二.Linux服务器接收音视频 音频接收程序:

H264音视频直播系统 服务器端+客户端源码 可用于视频聊天、视频会议

H264音视频直播系统  服务器端+客户端源码 可用于视频聊天.视频会议 RTP协议实现音视频网络实时直播,采用H.264和AAC编码,码率极低,同时有较高的视频清晰度和音频音质,可用于视频聊天.视频会议.摄像头监控等多种应用场景. 发布端,选择视频和音频设备,指定服务器发布直播源 接收端,接收发布者的音视频并播放.占用带宽很低,如图所示.采用动态码率,平时在4~5KB/s左右,动作幅度较大时在8KB/s. C++代码,VS2010工程,包含全部代码,不用其它依赖项,可直接编译 接口调用简单

音视频直播服务平台总结

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; text-align: center; font: 18.0px "PingFang SC Semibold"; color: #000000 } p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Helvetica; color: #000000; min-height: 13.0px } p.p3 { margin: 0.0px 0.0px 0.0

flex4+fms3.5+cs4开发实时音视频直播及点播详解

开发工具及环境: 1)flash builder4 2)flash cs4 3)flash media server3.5 fms部分 fms是adobe的流媒体服务器,不过是收费的,价格大概是oracle的一半,不过还是觉得挺贵的.adobe提供控制连接数的开发人员版,除了这点具体和完全版一样.服务器的配置网上很多,大家一搜就一大把. 其中关键的是: 由于需求是不仅要提供直播,而且还能点播历史音视频.而as的NetStream的publish方法提供的录制功能是将录制的视频放在直播的同一个文件

web音频流转发之音视频直播

前言 经过前面两篇文章的讲解,大家已经了解了audio的基本使用方法,下面我们就根据我们了解的api做一个直播.web音频流转发之AudioNode web音频流转发之音频源 原理 视频直播:采集一帧一帧的视频,转换为base64转发,接收到base64后,设置为img的src,然后不停的修改img的src形成视频 音频直播:采集一帧一帧的音频二进制数据,转发2进制数据,在接收端对2进制原始音频数据进行播放 采集和推流 获取摄像头,和麦克风需要https navigator.getUserMed

android音视频点/直播模块开发

前言 随着音视频领域的火热,在很多领域(教育,游戏,娱乐,体育,跑步,餐饮,音乐等)尝试做音视频直播/点播功能,那么作为开发一个小白,如何快速学习音视频基础知识,了解音视频编解码的传输协议,编解码方式,以及如何技术选型,如何解决遇到的坑,本文抛砖引玉,欢迎大咖交流. 一. 音视频的基础知识 1.1 基本概念 视频是什么 静止的画面叫图像(picture).连续的图像变化每秒超过24帧(frame)画面以上时,根椐视觉暂留原理, 人眼无法辨别每付单独的静态画面,看上去是平滑连续的视觉效果.这样的连

Android音视频点/直播模块开发实践总结-zz

随着音视频领域的火热,在很多领域(教育,游戏,娱乐,体育,跑步,餐饮,音乐等)尝试做音视频直播/点播功能.那么作为开发一个小白,如何快速学习音视频基础知识,了解音视频编解码的传输协议,编解码方式,以及如何技术选型,如何解决遇到的坑. 一. 音视频的基础知识 1.1 基本概念 视频是什么 静止的画面叫图像(picture).连续的图像变化每秒超过24帧(frame)画面以上时,根椐视觉暂留原理,人眼无法辨别每付单独的静态画面,看上去是平滑连续的视觉效果.这样的连续画面叫视频.当连续图像变化每秒低于

“小程序+直播”怎样搅动音视频技术生态?

责编 / 王宇豪 策划 / LiveVideoStack 12月26日晚间,微信小程序开放了直播能力,并首先向社交.教育.医疗.政务民生.金融等五大应用场景开放.与原生App应用和基于浏览器的H5应用相比,小程序直播会对音视频技术生态带来哪些影响?微信天生的流量优势会给开发者和运营带来机会还是陷阱?LiveVideoStack邀请了若干位有代表性的技术人,分享各自的观点与思考. LiveVideoStack:对于小程序提供的这种实时音视频功能,它是否能满足我们一般的直播需求呢?比如它的延迟大致能

视频直播 个人小结

视频直播 流媒体 1 伪流媒体 1.1 扫盲:边下载边播放 1.2 伪流媒体:视频不是实时播放的,先把视频放在数据库,再供客户端访问,比如:优酷,爱奇艺等 1.3 特点: > 边下边存,文件会保存. > 遵守了 HTTP 协议,但是没有遵守 RTMP 和 HLS 协议 > 能够实现快进和快退的功能 > 实现简单,成本低 2 实时流媒体 2.1 真正的流媒体,边下边播,但不会保存下载的文件 2.2 特点: > 下载的文件不会保存 > 遵守了 RTMP 或者 HLS 协议