当前位置: 首页 > news >正文

建站技术分享快速建站

建站技术分享,快速建站,腾讯企业邮箱容量,电子科技公司网站JavaCV与FFmpeg FFmpeg是一款开源的多媒体处理工具集#xff0c;它包含了一系列用于处理音频、视频、字幕等多媒体数据的库和工具。 JavaCV集成了FFmpeg库#xff0c;使得Java开发者可以使用FFmpeg的功能#xff0c;比如视频解码、编码、格式转换等。 除了FFmpeg#xff0…JavaCV与FFmpeg FFmpeg是一款开源的多媒体处理工具集它包含了一系列用于处理音频、视频、字幕等多媒体数据的库和工具。 JavaCV集成了FFmpeg库使得Java开发者可以使用FFmpeg的功能比如视频解码、编码、格式转换等。 除了FFmpegJavacv封装了以下库 OpenCV JavaCV封装了OpenCVOpen Source Computer Vision Library这是一个广泛用于计算机视觉应用的开源库。FlyCapture 用于 Point Grey 系列相机的库。ARToolKit 一个增强现实Augmented Reality库用于跟踪相机图像中的标记。JavaCpp 这是JavaCV的底层库用于在Java中调用C代码是整个JavaCV项目的基础。Libdc1394 用于相机和摄像机的库。JavaCV Presets 提供了一系列预设将原生的C/C函数封装为Java接口简化了在Java中调用这些功能的过程。 准备 1、引入maven包 dependency groupIdorg.bytedeco/groupId artifactIdjavacv-platform/artifactId version1.5.6/version /dependency2、类与方法说明 FFmpegFrameGrabber 和 FFmpegFrameRecorder 是 JavaCV 中用于处理视频的两个关键类分别用于抓取视频帧和录制视频帧底层使用了 FFmpeg 库。 我们可以使用 FFmpegFrameGrabber 打开视频文件获取视频信息然后不断地从视频中获取帧。 FFmpegFrameRecorder则从输入视频中抓取帧进行解码后将每一帧写入输出视频文件。 FFmpegFrameGrabber 与 FFmpegFrameGrabber 配合使用可以实现从视频源中抓取帧并将帧写入视频文件的完整流程。 2、推流流程 3、Nginx搭建rtmp服务器 1下载带有rtmp模块的nginxGryphon http://nginx-win.ecsds.eu/download/ 2在nginx中的conf文件夹配置rtmp。nginx-win.conf增加如下代码 rtmp {server {listen 1935;application flv-live{live on;record off;allow play all;}} }添加后cmd跳转到nginx目录执行命令 nginx.exe -c conf/nginx-win.conf 即可 FLV直播和HLS直播 FLVFlash Video直播 传输协议 FLV 使用 RTMPReal-Time Messaging Protocol作为传输协议。RTMP 是一种实时通信协议通常用于传输音频、视频和数据。实时性 FLV 提供较低的延迟通常在数秒到十几秒之间适用于需要更快实时性的应用场景。支持性 FLV 需要 Flash 播放器来播放而在现代浏览器和设备中对 Flash 的支持逐渐减少。这导致了使用 FLV 的限制。 HLSHTTP Live Streaming直播 传输协议 HLS 使用 HTTP 协议这使得它更容易穿越防火墙和代理服务器。它通常基于标准的 HTTP 80/443 端口因此更容易被防火墙允许。实时性 相对于 FLVHLS 通常有更高的延迟通常在 10 到 30 秒之间。这使得它不太适合需要极低延迟的实时应用。支持性 HLS 更广泛地支持各种设备和浏览器因为它基于标准的 HTTP 和 HTML5 规范无需专门的插件或播放器。自适应比特率 HLS 提供了自适应比特率功能可以根据用户的网络情况自动调整视频质量提供更好的观看体验。 选择 FLV 还是 HLS 取决于你的具体需求。如果需要较低的延迟并且可以接受使用 Flash 播放器的限制那么 FLV 可能是一个合适的选择。如果需要更广泛的设备和浏览器支持并且可以接受稍高的延迟那么 HLS 可能更适合。在实际应用中有时候也会结合两者使用不同的协议来满足不同的需求。 实现Flv推流 拿一个h264格式的mov视频来演示先将mov转为flv并且进行推流。 import org.bytedeco.ffmpeg.global.avcodec; import org.bytedeco.ffmpeg.global.avutil; import org.bytedeco.javacv.*;public class RtmpFlv {private static final String outputUrl rtmp://localhost:1935/flv-live/test;private static final String inputUrl D:\视频.mov;public static void main(String[] args) throws FrameGrabber.Exception, FrameRecorder.Exception, InterruptedException {//设置FFmpeg日志级别avutil.av_log_set_level(avutil.AV_LOG_INFO);FFmpegLogCallback.set();//以文件路径的方式传入视频当然也支持以流的方式传入FFmpegFrameGrabber grabber new FFmpegFrameGrabber(inputUrl);//开始捕获视频流grabber.start();//用于将捕获到的视频流转换为输出URL的mp4格式。FFmpegFrameRecorder recorder new FFmpegFrameRecorder(outputUrl, grabber.getImageWidth(), grabber.getImageHeight());recorder.setFormat(flv);recorder.setVideoBitrate(grabber.getVideoBitrate()); // 设置视频比特率recorder.setFrameRate(grabber.getVideoFrameRate()); // 设置帧率recorder.setGopSize((int) grabber.getVideoFrameRate()); // 设置关键帧间隔// CRF 是一种用于控制视频/音频质量的参数它允许在保持目标质量的同时动态地调整比特率。较低的CRF值表示更高的质量但也可能导致较大的文件大小recorder.setAudioOption(crf, 23);Frame frame;//设置音频编码为AACif (grabber.getAudioChannels() 0) {recorder.setAudioChannels(grabber.getAudioChannels());recorder.setAudioBitrate(grabber.getAudioBitrate());recorder.setAudioCodec(avcodec.AV_CODEC_ID_AAC);}recorder.setVideoCodec(avcodec.AV_CODEC_ID_H264);//将解码后的帧记录到输出文件中//recorder.start通常用于处理已经解码成图像的视频数据recorder.start();while ((frame grabber.grab()) ! null) {recorder.record(frame);}recorder.close();grabber.close();} }运行后打开vlc软件点击媒体-》打开串流网络 ,输入rtmp://localhost:1935/flv-live/test 进行播放 实现M3U8推流 代码和上面的大同小异将一个H264的mp4视频转为hls利用http播放m3u8文件。 import org.bytedeco.ffmpeg.avformat.AVFormatContext; import org.bytedeco.ffmpeg.global.avcodec; import org.bytedeco.ffmpeg.global.avutil; import org.bytedeco.javacv.*;public class RtmpM3U8 {private static final String outputUrl D:\nginx_rtmp\html\test.m3u8;private static final String inputUrl D:\视频.mp4;public static void main(String[] args) throws FrameGrabber.Exception, FrameRecorder.Exception {//设置FFmpeg日志级别avutil.av_log_set_level(avutil.AV_LOG_ERROR);FFmpegLogCallback.set();//以文件路径的方式传入视频当然也支持以流的方式传入FFmpegFrameGrabber grabber new FFmpegFrameGrabber(inputUrl);//开始捕获视频流grabber.start();AVFormatContext avFormatContext grabber.getFormatContext();//获取视频时长//long duration avFormatContext.duration();//检查文件是否媒体流(视频流、音频流)if (avFormatContext.nb_streams() 0) {//表明没有媒体流return;}//用于将捕获到的视频流转换为输出URL的mp4格式。FFmpegFrameRecorder recorder new FFmpegFrameRecorder(outputUrl, grabber.getImageWidth(), grabber.getImageHeight(),grabber.getAudioChannels());recorder.setFormat(hls);recorder.setVideoBitrate(grabber.getVideoBitrate()); // 设置视频比特率recorder.setFrameRate(grabber.getVideoFrameRate()); // 设置帧率recorder.setGopSize((int) grabber.getVideoFrameRate()); // 设置关键帧间隔// 设置HLS切片参数//将每个切片时长设置为10秒recorder.setOption(hls_time, 15);//设置切片数大小recorder.setOption(hls_list_size, 20);//设置切片循环次数为50recorder.setOption(hls_wrap, 20);//每次切片完成后都会删除之前的切片文件。如果不设置或设置为其他值则不会删除之前的切片文件。recorder.setOption(hls_flags, delete_segments);//在使用 H.264 编码时通常要求输入的像素格式为 YUV420P。如果输入的像素格式不匹配就可能导致 avcodec_send_frame() 错误recorder.setPixelFormat(avutil.AV_PIX_FMT_YUV420P);//CRF 是一种用于控制视频/音频质量的参数它允许在保持目标质量的同时动态地调整比特率。较低的CRF值表示更高的质量但也可能导致较大的文件大小recorder.setAudioOption(crf, 23);Frame frame;//设置音频编码为AACif (grabber.getAudioChannels() 0) {recorder.setAudioChannels(grabber.getAudioChannels());recorder.setAudioBitrate(grabber.getAudioBitrate());recorder.setAudioCodec(avcodec.AV_CODEC_ID_AAC);}recorder.setVideoCodec(avcodec.AV_CODEC_ID_H264);//设置音频编码为AACif (grabber.getAudioChannels() 0) {recorder.setAudioChannels(grabber.getAudioChannels());recorder.setAudioBitrate(grabber.getAudioBitrate());recorder.setAudioCodec(avcodec.AV_CODEC_ID_AAC);}//将解码后的帧记录到输出文件中//recorder.start通常用于处理已经解码成图像的视频数据recorder.start();while ((frame grabber.grab()) ! null) {recorder.record(frame);}recorder.close();grabber.close();}}开始推流后会在D:\nginx_rtmp\html\生成m3u8和ts文件,我们只需要播放m3u8文件即可。 打开vlc软件点击媒体-》打开串流网络 ,输入http://localhost:8080/test.m3u8 进行播放 优化TODO 后继利用高性能网络框架netty进行直播多路复用避免视频重复解码推流详情关注最新文章
http://www.zqtcl.cn/news/276236/

相关文章:

  • 视频类网站如何做缓存网页设计框架怎么写
  • wordpress建站访问提示不安全网页加速器哪个最好用
  • 网博士自助建站系统下载毕业设计代做网站唯一
  • 江西网站建设优化服务营销软文范例大全100字
  • 图片类网站怎样做高并发专业做旗袍花的网站是什么网站
  • 我要建网站需要什么专业网站制作全包
  • 网站开发合同印花税自定义手机网站建设
  • 营销型网站开发流程制作网站需要钱吗
  • 提供有经验的网站建设百度识图识别
  • html手机网站怎么做湖南关键词优化品牌推荐
  • 网站定制开发收费标准是多少易语言如何做浏网站
  • 网站怎么做实名认证新手怎么开婚庆公司
  • .net做网站用什么技术网站优化排名方案
  • 电商网站备案流程网站移动端优化的重点有哪些
  • 数据需求 网站建设做qq空间的网站
  • 微信网站游戏网络规划设计师可以挂证吗
  • 有个做特价的购物网站网站建设与维护题库及答案
  • 长沙网站优化价格创意设计师个人网站
  • 滨河网站建设南京免费发布信息网站
  • 蓝色系列的网站邓砚谷电子商务网站建设
  • 德阳市住房和城乡建设局网站首页一个服务器可以建多少个网站
  • 建一个电商网站多少钱一起做网店货源app
  • 做网站用lunx代理记账 营销型网站
  • 凡客做网站怎么样WordPress分类目录 前100篇
  • 腾讯wordpress 建站教程本地的上海网站建设公司
  • 深圳市南山区住房和建设局官方网站上海专业网站建设公司站霸网络
  • 建网站的8个详细步骤网站集约化建设讲话
  • 建设局哪个网站查证南京注册公司多少钱
  • 免费的网站制作郑州中森网站建设
  • 网站关键词搜不到了濮阳网络教育