基于srs-librtmp发布H.264视频文件到服务器
开发平台:Linux
说明:srs提供了发布H.264的例子,在例子代码文件为srs_h264_raw_publish.c,例子调用srs-librtmp函数库即可实现H.264文件发布到服务器。
srs-librtmp为VS2010工程,在Linux下可以直接使用源代码,在srs-librtmp工程只使用到srs_librtmp.cpp和srs_librtmp.h。
工程的目录为:
没有使用Makefile,直接编译命令为
gcc -g -O0 srs_h264_raw_publish.c srs_librtmp.cpp -o publisher -lstdc++编译会有两处错误,修改如下:
1.把srs_h264_raw_publish.c第36行
#include "../../objs/include/srs_librtmp.h"改为
#include "srs_librtmp.h"2.把srs_librtmp.cpp第172行到175行
#define RTMP_SIG_SRS_PRIMARY RTMP_SIG_SRS_KEY"/"VERSION_STABLE_BRANCH
#define RTMP_SIG_SRS_HANDSHAKE RTMP_SIG_SRS_KEY"("RTMP_SIG_SRS_VERSION")"
#define RTMP_SIG_SRS_VERSION SRS_XSTR(VERSION_MAJOR)"."SRS_XSTR(VERSION_MINOR)"."SRS_XSTR(VERSION_REVISION)
#define RTMP_SIG_SRS_SERVER RTMP_SIG_SRS_KEY"/"RTMP_SIG_SRS_VERSION"("RTMP_SIG_SRS_CODE")"改为
#define RTMP_SIG_SRS_PRIMARY RTMP_SIG_SRS_KEY//"/"VERSION_STABLE_BRANCH
#define RTMP_SIG_SRS_HANDSHAKE RTMP_SIG_SRS_KEY"("RTMP_SIG_SRS_VERSION")"
#define RTMP_SIG_SRS_VERSION SRS_XSTR(VERSION_MAJOR)//"."SRS_XSTR(VERSION_MINOR)"."SRS_XSTR(VERSION_REVISION)
#define RTMP_SIG_SRS_SERVER RTMP_SIG_SRS_KEY//"/"RTMP_SIG_SRS_VERSION"("RTMP_SIG_SRS_CODE")"修改后再次编译,编译通过后会生成可执行文件publisher,把H.264文件放到工程目录。
使用下面命令发布H.264文件到服务器
./publisher ./yourfile.h264 rtmp://yourserver/live/test 30效果:
BUG:视频卡顿,通关观察数据,每发10帧就卡顿一次,正常发包的时间间隔为30ms左右,卡顿时的时间间隔为350ms左右。
srs_h264_raw_publish.c源码地址:
https://github.com/ossrs/srs/blob/master/trunk/research/librtmp/srs_h264_raw_publish.c
srs-librtmp源码网址:https://github.com/ossrs/srs-librtmp
参考博客:http://blog.csdn.net/win_lin/article/details/41170653
工程源码下载:http://download.csdn.net/download/qq1097289917/10248586
智能推荐
致敬雷神【最简单的基于FFMPEG的视频编码器(YUV编码为H.264)】最新ffmpeg编译
最近开始学习ffmpeg.学到 雷神的 最简单的基于FFMPEG的视频编码器(YUV编码为H.264) https://blog.csdn.net/leixiaohua1020/article/details/25430425 发觉2020.5月的版本编译使用时已经运行不正确。后来修改了一点东西才成功yuvb编码出mp4. 首先是yuv文件。我没下他对应的工程文件,用的是640x360_yuv42...
H.264小结
由于毕设做视频直播技术,所以需要学习h.264只是以下内容来自网络 少说话来一发 H.264是干什么的? 首先我们得明白,我们研究h.264为的是什么,其次我们得明白一些基础概念,然后才是具体实施。下来我们说下h.264是做什么的。 h.264具体是压缩视频的,如果不压缩视频,在网络环境中传输可能导致流量耗费特别严重,而且传输过程中容易出错,所以h.264就是针对这些问题产生的。 H.264基本概...
Layui parent.layui.open弹框之Iframe 传值处理
Layui open弹框获取值的方法 介绍:Layui 弹框之Iframe传值处理 我的想法 解决 子页面 获取 父页面方法以及元素。 上代码,看图片 原创作品,欢迎来讨论! 介绍:Layui 弹框之Iframe传值处理 本人在使用到layui的iframe版 ,里面使用到了弹框 。 普通弹框:layui.open(); 像这种传递值都没什么问题 , 子页面获取父页面值 或者父页面获取子页面值 全...
外置Tomcat无法使用devtools实现热部署
练手的项目每次有源码或者页面更新都需要重新启动,不能忍,热部署走一波 这个项目是用外置Tomcat启动的 项目层级目录 模块依赖关系:service 依赖于 model 依赖于 api (启动类在service模块中) 引入devTools依赖,确定相关idea配置无误后,发现热部署没有生效 得出结论: devTools无法对使用对外置的tomcat运行的项目生效 于是在网上搜索外置tomcat项...
C++跨平台库QT学习7 使用UnitTest单元测试入门
C++跨平台库QT学习7 使用UnitTest单元测试入门 一、新建子目录项目 二、新建控制台项目 三、新建测试用例子目录项目 mycalctest.pro文件内容: 测试用例文件test_mycalctesttest.cpp 在子项目`mycalctest`点右键、运行 一、新建子目录项目 在QT点击菜单 文件-新建文件或项目-其他项目-子目录项目: 二、新建控制台项目 然后继续建一个子项目: ...
猜你喜欢
Python实用模块(二十五)loguru
软硬件环境 windows 10 64bits anaconda with python 3.7 loguru 0.5.3 前言 Python实用模块(十四)logging https://xugaoxiang.com/2019/12/04/python-module-logging 已 经介绍过了python内置日志模块logging。我们要使用logging,一般来讲,都是需要进行一...
Glide图片加载框架的使用简介与功能介绍
Glide图片加载框架的使用简介 . 1. 在app/build.gradle文件当中添加如下依赖: 2. 在AndroidManifest.xml中声明一下网络权限才行: 3. 开始使用Glide加载图片 with()方法的介绍 作用: 用于创建一个加载图片的实例;with()方法可以接收Context、Activity或者Fragment类型的参数 注意: with()方法中传入的实例会决定G...
编写过滤器解决全局乱码问题
过滤器编写步骤 编写一个类实现javax.servlet.Filter接口 重写接口中所有的方法,其中doFilter方法执行过滤的功能 配置过滤器 在web.xml中配置 使用注解@WebFilter 解决乱码需要添加这句代码:req.setCharacterEncoding(“utf-8”); 字符集与网页的编码要一致 EncodingFilter.java: 过滤器的...
HTML+CSS+JS做一个简易音乐播放器
先给大家看下效果: 实现功能:音乐播放,歌词跟随进度滚动,中间随着音乐播放图片360度旋转 文件目录: 做一个播放器,音乐和歌词事先要下载好,搜一些自己喜欢的封面,让图片360度旋转的样式,通过按钮增删样式达到跟音乐同步进行: 其中歌词匹配才是让我头疼的,所有JS代码部分: 需要所有源码,可以去github上自行下载: https://github.com/lzs1996/MusicPlayer....
Ecplise(jsp文件)导入css文件路径没错,但是没有样式(不生效/无效)
一、检查css文件的【路径】是否正确 1、:将页面在【浏览器】打开,按【Ctrl+u】,查看【页面源代码】(也可右键点击) 若页面进行【跳转】------>说明css路径没错 二、若路径有问题 参考链接: 1、Jsp中引入css等外部文件路径问题 https://blog.csdn.net/prospective0821/article/details/79775626?utm_medium...
