一、RTMP
全称 Real Time Messageing Protocol,实时消息传送协议;
出身:由Adobe公司基于 Flash Player 播放器对应的音视频flv封装格式提出的一种传输协议;
优点:
1、延迟很低,一般在1~3s;
2、长时间连续播放稳定;
3、一般的视频会议、互动式直播够用;
缺点:
1、基于应用层TCP长连接协议数据传输,非公共端口,可能会被防火墙拦截;
2、它是Adobe私有协议,很多设备无法播放,特别是在IOS移动端,需要使用三方解码器;
3、高并发下不稳定。
扩展:
1、RTMP是主协议,除此之外,包括 RTMPT / RTMPS / RTMPE / RTMFP 等变种;
2、其中 RTMFP 是基于UDP传输的一种协议;常用于 P2P 通信;
应用:流媒体直播(Live)、点播(VOD);更多用于推流(主播方);
*推流:内容生产者;将现场的视频信号传到网络的过程,对网络环境要求比较高,如果不稳定,就会出现直播卡顿等现象,观看体验就会差;
*拉流:内容消费者;从服务器上拉取已经有直播的数据,解析、转码,最终在终端呈现;
1、全称 peer to peer,点对点或端对端的通信技术;
2、解决的问题:不同内网环境中的设备通过各自内网IP直接进行通信;
3、基础条件:中间服务器是具有公网ip地址;NAT网络地址交换协议(Network Address Translation):内网穿透、打洞、探针、中间件等;
4、前端应用:WebRTC(Web Real-Time Communications)实时通信技术:建立浏览器之间点对点的链接,实现音视频流或其他数据的传输;在线聊5天室、屏幕共享、文件共享、大文件点对点传输、实时游戏、直播、基于p2p的web搜索;
5、中间服务:1、peerjs自带的中转服务;2、peerjs-server自己搭建;3、后端搭建中转
1、全称:HTTP Live Streaming;
2、出身:Apple公司基于HTTP的流媒体实时传输协议;
3、原理:将整个流媒体数据,切割为连续的时长较短的 ts 文件(小分片,几秒的视频),并通过 M3U8 索引文件按顺序访问 ts 文件;
4、优点:
1、基于HTTP,允许穿透任何允许HTTP数据的防火墙或代理服务器。
2、很容易使用内容分发网络来传输媒体流,提速。
5、缺点:延时高 10s+;
6、应用:点播、直播领域;
*区分点播、直播的重要标志:m3u8索引文件有无#EXT-X-ENDLIST;
全称:HTTP FLASH VIDEO
优点:
1、基于HTTP,允许穿透任何允许HTTP数据的防火墙或代理服务器。
2、可以使用HTTPS做加密通道。
3、很好的移动端支持。
4、延时低 2s。

1、VideoJS(推荐)
官网:https://docs.videojs.com/
优点:开源免费;大而全;纯CSS+JS打造,扩展性高;兼容所有浏览器;
缺点:文档纯英文,不支持RTSP流(常用视频监控)播放,依赖flash。
注意:
1、rtmp:type设置为:rtmp/flv。
2、hls:type设置为:application/x-mpegURL。
2、CKPlayer(不推荐)
官网:https://www.ckplayer.com/
优点:功能较为齐全;独立配置文件;独立素材、皮肤支持;
缺点:不适合小屏播放,样式易错乱;UI风格不太友好;后期增加独立功能,比较困难;占用项目主包;
使用:
1、需放在public 或 assets文件中,index.html 作为静态文件引入它;
2、本地、沙盒环境UI不一致;
3、【截图按钮】在全屏下,会消失,因为它只相对父级定位;
4、视屏的功能控件,dom结构动态输出,没有class值,无法进行ui覆盖;
5、音量控件,不支持垂直展示;
3、西瓜播放器
官网:https://v2.h5player.bytedance.com/
字节跳动结合自己的业务,造的轮子;【视频截屏】有坑,没敢踩。
4、DPlayer
官网:https://dplayer.js.org/zh/
优点:
1、API简洁;
2、UI风格比较符合现代审美,按钮控件结构清晰;可通过class覆盖样式;
3、集成弹幕;
4、支持主流视频,需要结合其他组件库:hls.js、flv.js等;
5、github持续维护;Issue有解决常见问题的方案;
截图功能:
1、自带的截图配置,无法设置图片的名称;默认Dplayer.png;
2、接管截图数据,交由开发者操作:https://github.com/DIYgod/DPlayer/issues/1006
右键菜单:
1、阻止:https://github.com/DIYgod/DPlayer/issues/544
禁止m3u8和ts文件持续请求:
1、虽然播放器被销毁,但是HLS服务还在持续执行:https://github.com/DIYgod/DPlayer/issues/628
2、HLS.js配置:https://github.com/video-dev/hls.js/blob/master/docs/API.md#hlsstartlevel
vue二次封装:
https://console.cloud.baidu-int.com/devops/icode/repos/baidu/adu/v2xapp-key-vehicle-front/blob/develop:src/components/videoPlayer/dPlayer.vue
"dplayer": "^1.26.0",
"hls.js": "^1.0.5",
import DPlayer from '@/components/videoPlayer/dPlayer';
<DPlayer
class="video-area"
:ref=""
:key=""
:className=""
:videoUrl=""
></DPlayer>
含义:由于在 位图中的像素可能来自多种来源,包括从 其他主机检索的图像或视频,因此不可避免的会出现安全问题。参考:https://developer.mozilla.org/zh-CN/docs/Web/HTML/CORS_enabled_image
场景:h5画分享海报、前端裁剪图片、合成图片、前端视频截图、html2Canvas插件使用等。
结果:浏览器将阻止从canvas中读取数据,如toDataURL()、toBlob()、getImageData() 方法都不可用。

解决方法
let video = document.querySelector('#dplayer video');
video.setAttribute('crossOrigin', 'anonymous'); // 重点,前提:服务端的视频支持跨域
const canvas = document.createElement('canvas');
canvas.width = this.player.video.videoWidth;
canvas.height = this.player.video.videoHeight;
canvas.getContext('2d').drawImage(this.player.video, 0, 0, canvas.width, canvas.height);
const data = canvas.toDataURL('image/jpg');
可能的解决方法:利用image标签跨域的能力
// 西瓜视频、网上大多资料的解决方案
let img = new Image();
img.setAttribute('crossorigin', 'anonymous') // 给图片设置允许跨域
image.src = canvas.toDataURL('image/png').replace("image/png", "image/octet-stream");
img.onload = function () {
// do Something
}
img.error = function () {}
动漫制作技巧是很多新人想了解的问题,今天小编就来解答与大家分享一下动漫制作流程,为了帮助有兴趣的同学理解,大多数人会选择动漫培训机构,那么今天小编就带大家来看看动漫制作要掌握哪些技巧?一、动漫作品首先完成草图设计和原型制作。设计草图要有目的、有对象、有步骤、要形象、要简单、符合实际。设计图要一致性,以保证制作的顺利进行。二、原型制作是根据设计图纸和制作材料,可以是手绘也可以是3d软件创建。在此步骤中,要注意的问题是色彩和平面布局。三、动漫制作制作完成后,加工成型。完成不同的表现形式后,就要对设计稿进行加工处理,使加工的难易度降低,并得到一些基本准确的概念,以便于后续的大样、准确的尺寸制定。四、
2022/8/4更新支持加入水印水印必须包含透明图像,并且水印图像大小要等于原图像的大小pythonconvert_image_to_video.py-f30-mwatermark.pngim_dirout.mkv2022/6/21更新让命令行参数更加易用新的命令行使用方法pythonconvert_image_to_video.py-f30im_dirout.mkvFFMPEG命令行转换一组JPG图像到视频时,是将这组图像视为MJPG流。我需要转换一组PNG图像到视频,FFMPEG就不认了。pyav内置了ffmpeg库,不需要系统带有ffmpeg工具因此我使用ffmpeg的python包装p
Transformers开始在视频识别领域的“猪突猛进”,各种改进和魔改层出不穷。由此作者将开启VideoTransformer系列的讲解,本篇主要介绍了FBAI团队的TimeSformer,这也是第一篇使用纯Transformer结构在视频识别上的文章。如果觉得有用,就请点赞、收藏、关注!paper:https://arxiv.org/abs/2102.05095code(offical):https://github.com/facebookresearch/TimeSformeraccept:ICML2021author:FacebookAI一、前言Transformers(VIT)在图
我正在使用Ruby/Mechanize编写一个“自动填写表格”应用程序。它几乎可以工作。我可以使用精彩CharlesWeb代理以查看服务器和我的Firefox浏览器之间的交换。现在我想使用Charles查看服务器和我的应用程序之间的交换。Charles在端口8888上代理。假设服务器位于https://my.host.com。.一件不起作用的事情是:@agent||=Mechanize.newdo|agent|agent.set_proxy("my.host.com",8888)end这会导致Net::HTTP::Persistent::Error:...lib/net/http/pe
目前我正在使用这个正则表达式从YoutubeURL中提取视频ID:url.match(/v=([^&]*)/)[1]我怎样才能改变它,以便它也可以从这个没有v参数的YoutubeURL获取视频ID:http://www.youtube.com/user/SHAYTARDS#p/u/9/Xc81AajGUMU感谢阅读。编辑:我正在使用ruby1.8.7 最佳答案 对于Ruby1.8.7,这就可以了。url_1='http://www.youtube.com/watch?v=8WVTOUh53QY&feature=feedf'url
我一直在寻找一种以编程方式或通过命令行将mp3转换为aac的方法,但没有成功。理想情况下,我有一段代码可以从我的Rails应用程序中调用,将mp3转换为aac。我安装了ffmpeg和libfaac,并能够使用以下命令创建aac文件:ffmpeg-itest.mp3-acodeclibfaac-ab163840dest.aac当我将输出文件的名称更改为dest.m4a时,它无法在iTunes中播放。谢谢! 最佳答案 FFmpeg提供AAC编码功能(如果您已编译它们)。如果您使用的是Windows,则可以从here获取完整的二进制文件。
Asitcurrentlystands,thisquestionisnotagoodfitforourQ&Aformat.Weexpectanswerstobesupportedbyfacts,references,orexpertise,butthisquestionwilllikelysolicitdebate,arguments,polling,orextendeddiscussion.Ifyoufeelthatthisquestioncanbeimprovedandpossiblyreopened,visitthehelpcenter提供指导。11年前关闭。我是一位精通HTML
我如何用ruby编写一个脚本,当从命令行执行时播放mp3文件(背景音乐)?我试过了run="mplayer#{"/Users/bhushan/resume/m.mp3"}-aosdl-vox11-framedrop-cache16384-cache-min20/100"system(run)但它也不起作用,以上是播放器特定的。如果用户没有安装mplayer怎么办。有没有更好的办法? 最佳答案 我一般都是这样pid=fork{exec'mpg123','-q',file} 关于ruby
我目前正在为一个新网站设计版本化的API。我了解如何为路由命名空间,但我一直坚持在模型中实现版本化方法的最佳方式。下面的代码示例使用的是rails框架,但是事情的原理在大多数web框架之间应该是一致的。目前的路线看起来像这样:MyApp::Application.routes.drawdonamespace:apidonamespace:v1doresources:products,:only=>[:index,:show]endendend和Controller:classApi::V1::ProductsController很明显,我们只是在此处公开Product上可用的属性,如果
我正在尝试使用ruby来使用Sharepoint网络服务。我基本上已经放弃尝试使用NTLM进行身份验证,并暂时将Sharepoint服务器更改为使用基本身份验证。我已成功使用soap4r获得WSDL,但在尝试使用实际Web服务调用时仍然无法进行身份验证。有没有人有过让ruby和Sharepoint对话的经验? 最佳答案 我是个新手。但经过很多时间并在更多经验编码人员的帮助下,我能够让ruby与Sharepoint2010一起工作。下面的代码需要“ntlm/mechanize”gem。我已经能够使用列表GUID和ListV