## 目录
<ol>
<li><a href="#jtt1078-video-server">简介说明</a></li>
<li><a href="#分支说明">分支说明</a></li>
<li><a href="#项目说明">项目说明</a></li>
<li><a href="#准备工具">准备工具</a></li>
<li><a href="#测试步骤">测试步骤</a></li>
<li><a href="#测试环境">测试环境</a></li>
<li><a href="#TODO">TODO</a></li>
<li><a href="#致谢">致谢</a></li>
<li><a href="#推荐群友项目">推荐群友项目</a></li>
<li><a href="#交流讨论">交流讨论</a></li>
</ol>
<div align="center"><img src="./doc/1078.png" /></div>
<hr />
## jtt1078-video-server
基于JT/T 1078协议实现的视频转播服务器,当车机服务器端主动下发**音视频实时传输控制**消息(0x9101)后,车载终端连接到此服务器后,发送指定摄像头所采集的视频流,此项目服务器完成音视频数据接收并转码,完成转播的流程,提供各平台的播放支撑。
同时,本项目在配置 **ffmpeg路径** 及 **rtmp url** 后,将同时输出一路到 **RTMP** 服务器上去,为移动端播放提供音视频支持(注意,由于旁路的RTMP流是通过ffmpeg子进程实现,并且有音频转码的过程,所以性能将有很大的下降)。
> 非常感谢 **孤峰赏月/hx([github/jelycom](https://github.com/jelycom))** 提供的mp3音频支持。
## 分支说明
原项目有4个分支不同的实现方式,现将其它分支全部删除,已经用不上了。
配置了ffmpeg和rtmp,可以想办法同时输出到比如HLS等。
> 有其它语言的开发者,可以参考我的“[JTT/1078音视频传输协议开发指南](https://www.hentai.org.cn/article?id=8)”,我所知道的官方文档里的错误或是缺陷以及坑,我全部写了下来,希望对你有帮助。
### 项目说明
本项目接收来自于车载终端发过来的音视频数据,视频直接封装为FLV TAG,音频完成G.711A、G.711U、ADPCMA、G726到PCM的转码,并使用MP3压缩后再封装为FLV TAG。
#### 视频编码支持
目前几乎所有的终端视频,默认的视频编码都是h264,打包成flv也是非常简单的,有个别厂家使用avs,但是我没有碰到过。本项目目前也只支持h264编码的视频。
#### 音频编码支持
|音频编码|支持|备注|
|---|---|---|
|G.711A|Y|支持|
|G.711U|Y|支持|
|ADPCMA|Y|支持|
|G.726|Y|支持|
音频编码太多,也没那么多设备可以测试的,比较常见的就G.711A和ADPCMA这两种,本程序对于不支持的音频,将作 **静音处理** 。
#### 音频编码转码扩展实现
继承并实现`AudioCodec`类的抽象方法,完成任意音频到PCM编码的转码过程,并且补充`AudioCodec.getCodec()`工厂方法即可。`AudioCodec`抽象类原型如下:
```java
public abstract class AudioCodec
{
// 转换至PCM
public abstract byte[] toPCM(byte[] data);
// 由PCM转为当前编码,可以留空,反正又没有调用
public abstract byte[] fromPCM(byte[] data);
}
```
### 准备工具
项目里准备了一个测试程序(`src/main/java/cn.org.hentai.jtt1078.test.VideoPushTest.java`),以及一个数据文件(`src/main/resources/tcpdump.bin`),数据文件是通过工具采集的一段几分钟时长的车载终端发送上来的原始消息包,测试程序可以持续不断的、慢慢的发送数据文件里的内容,用来模拟车载终端发送视频流的过程。
另外,新增了 `cn.org.hentai.jtt1078.test.RTPGenerate` 类,用于读取bin文件,并且修改SIM卡号和通道号,创建大量数据文件以便于压力测试。
### 测试步骤
1. 配置好服务器端,修改`app.properties`里的配置项。
2. 直接在IDE里运行`cn.org.hentai.jtt1078.app.VideoServerApp`,或对项目进行打包,执行`mvn package`,执行`java -jar jtt1078-video-server-1.0-SNAPSHOT.jar`来启动服务器端。
3. 运行`VideoPushTest.java`,开始模拟车载终端的视频推送。
4. 开始后,控制台里会输出显示**start publishing: 013800138999-2**的字样
5. 打开浏览器,输入 **http://localhost:3333/test/multimedia#013800138999-2** 后回车
6. 点击网页上的**play video**,开始播放视频
### 测试环境
我在我自己的VPS上搭建了一个1078音视频环境,完全使用了**flv**分支上的代码来创建,各位可以让终端将音视频发送到此服务器或是使用**netcat**等网络工具发送模拟数据来仿真终端,来体验音视频的效果。下面我们说一下通过**netcat**来模拟终端的方法:
|标题|说明|
|---|---|
|1078音视频服务器|185.251.248.4:10780|
|实时音视频播放页面|http://1078.hentai.org.cn/test/multimedia#SIM-CHANNEL|
1. 首先,本项目的 **/src/main/resources/** 下的 **tcpdump.bin** 即为我抓包存下来的终端音视频数据文件,通过`cat tcpdump.bin | pv -L 40k -q | nc 185.251.248.4 10780`即可以每秒40kBPS的速度,向服务器端持续的发送数据。
2. 在浏览器里打开**http://1078.hentai.org.cn/test/multimedia#SIM-CHANNEL** (注意替换掉后面的SIM和CHANNEL,即终端的SIM卡号,不足12位前面补0,CHANNEL即为通道号),然后点击网页上的**play video**即可。
> 由于我的服务器IP随时可能会发生变化,建设在尝试连接测试服务器前,先通过`ping www.hentai.org.cn`来确定最新的IP。
### 项目文件说明
```
├── doc
│ ├── 1078.png(图标)
│ └── ffmpeg.png
├── LICENSE(开源协议)
├── pom.xml
├── README.md(项目说明)
├── src
│ └── main
│ ├── java
│ │ └── cn
│ │ └── org
│ │ └── hentai
│ │ └── jtt1078
│ │ ├── app
│ │ │ └── VideoServerApp.java(主入口程序)
│ │ ├── codec
│ │ │ ├── ADPCMCodec.java(ADPCM编解码器)
│ │ │ ├── AudioCodec.java(音频编解码抽象父类)
│ │ │ ├── G711Codec.java(G711A/alaw编解码器)
│ │ │ ├── G711UCodec.java(G711U/ulaw编解码器)
│ │ │ ├── g726(G726编解码实现)
│ │ │ │ ├── G726_16.java
│ │ │ │ ├── G726_24.java
│ │ │ │ ├── G726_32.java
│ │ │ │ ├── G726_40.java
│ │ │ │ ├── G726.java
│ │ │ │ └── G726State.java
│ │ │ ├── G726Codec.java(G726编解码器)
│ │ │ ├── MP3Encoder.java(PCM到MP3压缩编码器)
│ │ │ └── SilenceCodec.java(静音化解码器)
│ │ ├── entity
│ │ │ ├── Audio.java
│ │ │ ├── MediaEncoding.java
│ │ │ ├── Media.java
│ │ │ └── Video.java
│ │ ├── flv
│ │ │ ├── AudioTag.java
│ │ │ ├── FlvAudioTagEncoder.java
│ │ │ ├── FlvEncoder.java(H264到FLV封装编码器)
│ │ │ └── FlvTag.java
│ │
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
这里为你收集整理了关于毕业设计、课程设计可参考借鉴的资料一份,质量非常高,如果你投入时间去研究几天相信肯定对你有很大的帮助。到时候你会回来感谢我的。 本资源是经过本地编译测试、可打开、可运行的项目、文件或源码,可以用于毕业设计、课程设计的应用、参考和学习需求,请放心下载。 祝愿你在这个毕业设计项目中取得巨大进步,顺利毕业! 但还需强调一下,这些项目源码仅供学习和研究之用。在使用这些资源时,请务必遵守学术诚信原则和相关法律法规,不得将其用于任何商业目的或侵犯他人权益的行为。对于任何因使用本资源而导致的问题,包括但不限于数据丢失、系统崩溃或安全漏洞,风险自担哦!
资源推荐
资源详情
资源评论
收起资源包目录
毕业设计-基于JTT 1078标准实现的视频转播服务器.zip (72个子文件)
jtt1078-video-server-flv
pom.xml 3KB
doc
ffmpeg.png 15KB
donate.png 24KB
1078.png 6KB
src
main
resources
video.html 873B
g726
in_16.g726 159KB
in_40.g726 398KB
in_24.g726 239KB
in_32.g726 318KB
tcpdump.bin 7.94MB
audio.html 3KB
log4j.properties 371B
app.properties 469B
nginx_sample.conf 1KB
test.html 3KB
multimedia.html 4KB
java
cn
org
hentai
jtt1078
app
VideoServerApp.java 6KB
http
GeneralResponseWriter.java 440B
NettyHttpServerHandler.java 7KB
subscriber
VideoSubscriber.java 3KB
RTMPPublisher.java 2KB
Subscriber.java 3KB
flv
AudioTag.java 2KB
FlvTag.java 2KB
FlvAudioTagEncoder.java 1KB
FlvEncoder.java 6KB
entity
MediaEncoding.java 1KB
Video.java 253B
Media.java 559B
Audio.java 253B
test
ChannelTest.java 2KB
UnPack.java 2KB
MP3Test.java 2KB
AudioTest.java 2KB
FuckTest.java 1KB
VideoPushTest.java 983B
VideoServer.java 5KB
WAVTest.java 2KB
G711ATest.java 1KB
RTPGenerate.java 2KB
codec
G726Codec.java 3KB
ADPCMCodec.java 10KB
G711UCodec.java 7KB
G711Codec.java 5KB
SilenceCodec.java 378B
g726
G726.java 14KB
G726_16.java 11KB
G726State.java 4KB
G726_40.java 10KB
G726_24.java 9KB
G726_32.java 10KB
AudioCodec.java 803B
MP3Encoder.java 1KB
publisher
PublishManager.java 2KB
Channel.java 4KB
server
Session.java 707B
SessionManager.java 745B
Jtt1078Decoder.java 1KB
Jtt1078Handler.java 4KB
Jtt1078MessageDecoder.java 1KB
util
ByteBufUtils.java 1KB
HttpChunk.java 407B
ByteUtils.java 5KB
ByteHolder.java 2KB
Packet.java 7KB
WAVUtils.java 2KB
FLVUtils.java 604B
FileUtils.java 2KB
Configs.java 1KB
LICENSE 551B
.gitignore 42B
README.md 13KB
共 72 条
- 1
资源评论
高校毕业设计
- 粉丝: 210
- 资源: 384
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- EXCEL从图片链接获取图片
- Untitled-1 (1).dwt
- ChatGPT是一款由OpenAI研发的人工智能聊天机器人程序,以下是对其特点、发展历程和功能的详细归纳: 特点 技术驱动:C
- 基于STM32的毕业设计项目可以涵盖多个领域和应用,以下是一个典型的基于STM32的毕业设计项目框架,并结合参考文章中的相关数字
- 在植物大战僵尸杂交版中,代码资源或秘籍指令可以提供各种游戏内的效果 以下是一些常用的代码资源和秘籍指令,以及它们的描述和用途:
- C语言题库-信.doc
- 对于端午节代码资源,你可以考虑以下几个方向: ### 1. 端午节主题的小游戏 你可以创建一个端午节主题的小游戏,比如"捞粽
- 如果你是在寻找编程相关的节日主题代码资源,我可以为你提供一些常见的做法和示例 以下是一些可能会有帮助的方法: ### 1. 制
- NX二次开发uc6496 函数介绍
- YOLO(You Only Look Once)是一个流行的实时目标检测算法,它通过单个神经网络模型同时预测图像中多个目标的位置
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功