咸鱼

咸鱼是以盐腌渍后,晒干的鱼

0%

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
$ vim /etc/systemd/system/myjar.service


[Unit]
Description=myjar-server
#在哪个服务之后启动
After=syslog.target network.target remote-fs.target nss-lookup.target
[Service]
Type=simple
User=root
Group=root
#启动命令
#ExecStart=java -jar /usr/local/myjar.jar --spring.profiles.active=pro
ExecStart=java -jar /usr/local/myjar.jar --spring.profiles.active=pro
# nohup命令无效
#ExecStart=nohup java -jar /usr/local/myjar.jar --spring.profiles.active=pro >>/usr/local/myjar.log&


ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target

# 开启开机启动
$ systemctl enable myjar
Created symlink /etc/systemd/system/multi-user.target.wants/myjar.service → /etc/systemd/system/myjar.service.

# 查看服务是否开机启动:
$ systemctl is-enabled myjar
enabled

# 禁止开机启动
$ systemctl disable myjar
Removed /etc/systemd/system/multi-user.target.wants/myjar.service.

# 查看服务状态
$ systemctl status myjar
● myjar.service - myjar-server
Loaded: loaded (/etc/systemd/system/myjar.service; disabled; vendor prese>
Active: inactive (dead)

# 查看服务详情
$ systemctl show myjar

# 手动启动服务
$ systemctl start myjar
# 手动停止服务
$ systemctl stop myjar


# 查看日志
$ journalctl -u myjar

手动启动停止后台服务

1
2
3
4
5
6
7
# 运行一个后台服务
$ nohup jar -jar test.jar >> myout.log &

# 当要停止此服务时,先查询pid,再kill
$ ps -ef|grep v680
root 522133 1 0 12:10 pts/0 00:00:20 java -jar test.jar
$ kill -9 522133

记录后台服务PID

shell脚本中,可以用 $! 获取到当前进程的PID。
开始脚本 通过 echo $! > my.pid 将PID写入到一个文件中;
停止脚本 从文件中读出PID,执行Kill命令杀掉进程。

启动

阅读全文 »

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 查看IP信息
$ ip addr

$ sudo vim /etc/netplan/50-cloud-init.yaml

# This file is generated from information provided by
# the datasource. Changes to it will not persist across an instance.
# To disable cloud-init's network configuration capabilities, write a file
# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
# network: {config: disabled}
network:
ethernets:
ens33:
dhcp4: false
addresses: [192.168.0.66/24]
optional: true
gateway4: 192.168.0.1
nameservers:
addresses: [8.8.8.8,4.4.4.4]
version: 2

# 应用修改
$ sudo netplan apply

在Windows下Idea新建的Gradle纯Java项目,运行和编译时一些中文信息总是乱码;最近Android Studio升级Gradle为 6.0+ ,编译时也会出现中文乱码,如果apk名称带有中文,在AS中debug运行直接报错(The application could not be installed. Installation failed due to: 'Invalid File:

这里记录一下几种方法:

  1. 修改Idea全局设置

Help —> Edit Custom VM Options -> 输入:

1
-Dfile.encoding=UTF-8
阅读全文 »

Calendar 有 after() 和 before() 两个函数比较日期的前后。

  • obj.before(calendar_params); 用于检查此日历时间(calendar_params)是否在给定Object的时间所表示的时间之前。
  • obj.after(calendar_params); 用于检查此日历时间(calendar_params)是否在给定Object的时间所表示的时间之后。
1
2
3
4
5
6
7
8
Calendar now = Calendar.getInstance();
Calendar target = Calendar.getInstance();
target.add(Calendar.DAY,1);

// target 在 now 之前 返回 true
boolean result1 = now.before(target);
// target 在 now 之后 返回 true
boolean result2 = now.after(target);

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/houxiaoni01/article/details/78832414

FLV(Flash Video)是Adobe公司设计开发的一种流行的流媒体格式,由于其视频文件体积轻巧、封装简单等特点,使其很适合在互联网上进行应用。此外,FLV可以使用Flash Player进行播放,而Flash Player插件已经安装在全世界绝大部分浏览器上,这使得通过网页播放FLV视频十分容易。目前主流的视频网站如优酷网,土豆网,乐视网等网站无一例外地使用了FLV格式。FLV封装格式的文件后缀通常为“.flv”。
  总体上看,FLV包括文件头(File Header)和文件体(File Body)两部分,其中文件体由一系列的Tag组成。因此一个FLV文件是如图1-1结构。

头文件 Tag#1 Tag#2 Tag#3

                    图1-1 文件结构(简图)

  其中,每个Tag前面还包含了Previous Tag Size字段,表示前面一个Tag的大小。Tag的类型可以是视频、音频和Script,每个Tag只能包含以上三种类型的数据中的一种。图1-2展示了FLV文件的详细结构。

阅读全文 »

1. 文件操作

【mp4parser】 这个库提供了用于读取、写入和创建MP4文件的Java API,包含三个组件:

  1. isoparser
  2. muxer
  3. streaming

我用了muxer,将H264文件和AAC文件合并为MP4文件。

1
2
3
4
5
6
<!-- https://mvnrepository.com/artifact/org.mp4parser/muxer -->
<dependency>
<groupId>org.mp4parser</groupId>
<artifactId>muxer</artifactId>
<version>1.9.41</version>
</dependency>
阅读全文 »

go get下载包失败在国内是常见的问题,下面是通过设置代理的解决方案

Go 版本是 1.13 及以上 (推荐)

1
2
$ go env -w GO111MODULE=on
$ go env -w GOPROXY=https://goproxy.io,direct

Go 版本是 1.12 及以下(实测1.14用这个方法也可以)

1
2
3
4
5
6
7
8
9
10
11
12
13
$ vim /etc/profile   (全部用户生效)
# 或者
$ vim ~/.profile (当前用户生效)

export GO111MODULE=on
# 七牛云赞助支持的
export GOPROXY=https://goproxy.cn
# 阿里云
#export GOPROXY=https://mirrors.aliyun.com/goproxy/
# goproxy.io
#export GOPROXY=https://goproxy.io/

$ source ~/.profile
阅读全文 »

RTP Over UDP

这是rtmp-rtsp-stream-client-java发出的包

1
80600396000cf6ae0ce9d37f|我是分隔符|7c85b8141ff1c6921a6ba385c00040056dd92a7ccbeb7e38000837470001067fff1fc3177b46c9c731d84f1e6b6f6ff6fc763b09e21dfe9df6dbc8b84f176dbfe9db4d3b68efff8f1c444b8fca76b5da32e13cda7476ffff477fc47e3c53ebad78fc20f47edf6fe3ffa3fffff3ff043afe1edee6b04a600b730c899d05e4d4dffba8ba5f3adab44c59e08ded760e63763eda138901d3c527ffedff09e0854eb3b7ffe3bef09fd013dfb7ffe9be1d7a32430a449f19848276060df0f31fe941ff8a8976a7039b22b8d910300043c1c004254905641cf077c3c9ed77812f89043040be9a437b35b520bf448436f46f48c000401817b8f391571dc96f9f8515c3225034d14963b27feab77e6a3e8e7722e93bf6bda10b439fbee0f8afa2887e21c776f75fb8c50fff9f50caa27ddf2f17de9e690f29a9780eef43e6b031805184fce2e27feb480fb577381cace9e2bbaf378354bd524c3a3c45812dc55528ee47b8a78ab2f228bddf5372c7964bd0781f5cb673f2dbd45cfe8fc00e8675e64aaca76d34cdbaa6993c69c69c5df77bb0cf48a7ba41457cb8f6d42728128ecd69f2d1b7fdbffc89e3ebe78cbbe90bb557dc8fa006e3e8593fb7f5d3b65a8347e7ffd757e21558f4b17ac009c887912807061fdc1d87e56cfffcd951823d6e8d28060f7038a1605115c154bc0bcec0e77cfbc17ae34e6cf9b2b7641dd1f4e3e5dfff0f060a7bf595121372efffdbd2de14a9c908826749655109894930c25b0cb20fc30327a7ffc2b8973fff6e54b221f641354a50ffffe8e7485551a7fffca8c832481117a78fffdb6d05fd3edf171153a44cb24d580c9862259a3152f54e1565d4694eda2a32519e5ffbbfa88afe7cd956bd2f516f74fffa21042c4e12421c2112488a2a11b4da4055a564a7b022561f103175bd441f8f73fc3d4474f8e62d71bc4c1dc6c6cd295df1690870f73aa0efad48c09f7ec5203c0954554ba7f0a312006e3bd03fbacf6ff9518c1ed5bccb3c49106c150b6bc14c5216e9ab42bfb48cb8d958eb59641482a2946928541f04f49fd74e3b4ea8e67b78147940b2d3813f275f5744028cad6a0d27369bd6b8e6ddf4ae5ea34ac977795b69afa9888a2dc7c657b8428e7f510f971c3d035d0ee31ee67a6185555ceb6610c896d16c32cd8c857bedf56aaf58a49a1e68f28875bedf4bd083601f0ada56fffffe7d61d07fd650b7e045246963c6aa9d28ed1ccf9e37c584401664a2f8e92c711f055b7b52d9d89dc02f7e48280553ca1c2d52cf20159a824cb6fb7eb60971384a9ff7b954807714fcb880952c102ed4fd32af30ce6032668ad447dfae2425f10c04dfcfea34116c1565385b99728679581c8d23dbb18bdf90abeae6fbfa94ca18f486feb34d660bec5c5d76b54db986731a0857db65250c82d293b16060802c1c1037464d9b3709ecf5b770ca586800821738c93c4588a64b80d33292b3ec07c461c7e840bda57c18f4403615df6de9012a2b60b7e066105e60f30aee1506dbc2c4f2b8c89201b293a8fa61dd3d3804498c8c48643c80724573fb77238f65116824d336be409c8ec6a290344368394a6bd00a5872d4107ff54b09eb398c061f5e0c81283da0afdbf06686a383fab987254b835d095f2cabcbe0eaae9c4c03d7286ada203e607156d0d3a9b6f9f9a0034211effb7c0392a47214afbef9ffda37102e821292af133105d4c33b5ddbf0b1ba4e609422f878e94831e6f6909391292a41daafd076146581226a148afcfa1395062fa8

分隔符前面是 rtp header 后面是 rtp payload 也就是H264的NAL,这部分可能有三种情况:单NAL,聚合NAL,分包NAL

FU-A
阅读全文 »

抓包文件在附件中…

一、Play 抓包 Over TCP

  • 推流Client端rtmp-rtsp-stream-client-java
  • server端EasyDarwin
  • 播放Client端 Javacv 录制( 这里用Wireshark抓包

tcp追踪流

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
OPTIONS rtsp://192.168.0.223:554/test/ RTSP/1.0
CSeq: 1
User-Agent: Lavf58.12.100

RTSP/1.0 200 OK
CSeq: 1
Session: PoC0zKnGR
Public: DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE, OPTIONS, ANNOUNCE, RECORD

DESCRIBE rtsp://192.168.0.223:554/test/ RTSP/1.0
Accept: application/sdp
CSeq: 2
User-Agent: Lavf58.12.100
Session: PoC0zKnGR

RTSP/1.0 200 OK
CSeq: 2
Session: PoC0zKnGR
Content-Length: 444

v=0
o=- 0 0 IN IP4 127.0.0.1
s=Unnamed
i=N/A
c=IN IP4 192.168.0.223
t=0 0
a=recvonly
m=video 0 RTP/AVP 96
a=rtpmap:96 H264/90000
a=fmtp:96 packetization-mode=1;sprop-parameter-sets=Z0LAHtoHgUSAeEAhUA==,aM48gA==;
a=control:trackID=1
m=audio 0 RTP/AVP 96
a=rtpmap:96 MPEG4-GENERIC/32000/2
a=fmtp:96 streamtype=5; profile-level-id=15; mode=AAC-hbr; config=1290; SizeLength=13; IndexLength=3; IndexDeltaLength=3;
a=control:trackID=0
SETUP rtsp://192.168.0.223:554/test/trackID=1 RTSP/1.0
Transport: RTP/AVP/TCP;unicast;interleaved=0-1
CSeq: 3
User-Agent: Lavf58.12.100
Session: PoC0zKnGR

RTSP/1.0 200 OK
CSeq: 3
Session: PoC0zKnGR
Transport: RTP/AVP/TCP;unicast;interleaved=0-1

SETUP rtsp://192.168.0.223:554/test/trackID=0 RTSP/1.0
Transport: RTP/AVP/TCP;unicast;interleaved=2-3
CSeq: 4
User-Agent: Lavf58.12.100
Session: PoC0zKnGR

RTSP/1.0 200 OK
CSeq: 4
Session: PoC0zKnGR
Transport: RTP/AVP/TCP;unicast;interleaved=2-3

PLAY rtsp://192.168.0.223:554/test/ RTSP/1.0
Range: npt=0.000-
CSeq: 5
User-Agent: Lavf58.12.100
Session: PoC0zKnGR

RTSP/1.0 200 OK
CSeq: 5
Session: PoC0zKnGR
Range: npt=0.000-

#这是紧接着一帧一帧rtp包(rtp over tcp)
701ce71cfb29c8ff28ed6843080045000524c1c240004006f1c3c0a800dfc0a8001e022ae383d37e23f074458e0a501800feecab0000240004f88060447500bd14102e9f0a407c85b803f06fe00f0e157e880381bc15565f8c35982ddba36a0312c81fd3800a814eb570c928a7818974f2303f010e39d505ae59ae3ebb42bbe706078d36e0997a0e00020011c000fff70000fea1d04f4480006968249f20dad1f9b600a5b19018a3c169c190e22c754f401f5cb5f3a4fa0736d00d6cbcb19670584cc24d248c1c51ef552de01e01807565e81e0ce8185fc160dbbeea53228011496146e44add661440a93ca0b20a0e6b2455413b9964320ed088f5cb751a24effc030f6b65c1d423a60fcf96247b9e7de03c0ef60020a1d76ad07eab06ad7584bfea63cfc9f5af1516029898299d30daa09cbff265002a099de41d7fa2262cc9a2957e885747b2bfd24b95583fd2007b1dc8060c63d0f9cb6000201a7968ad6b1eb03fc4932ee1efbc13b7a1ef52167acab89f939b0d039dad33c4b541c6ee759e541591f309071a007c130ffd1801818830226664c4db87bc2a00342111c8a630a654263ac5856721e37ed483ab31f8fa7a6797d9135039ffdfffa121bf11d0f440a84cbf443d5c9edd00010114f1c8298d5ad50b189ec1da94250a4826c50f3620d9da18cdffffb8ea614710240104fe5fa6886924bcc0d76987aa095427a80a08e13f0b935ca244c4ed4ff43b4ce7cd881a403cf8932bbffff695047712c3e0b19448ad5405308200306a59632f0a50e9a7a488da16040ece88915077f4299c947fff0794c028eba019c1036e548ce347af0cc3b1a18448fbaca4a4adaa8efd7b06f5be2dc1e7daec2ca97e2070654438fc5fe8dd06e0d30400f6fa7e09acc0c889df44c0a9cfda3c70f1cd3e0c9adcb6e208141e03bdfafd780400a3a3bf0f72fab2f7df9f8d0c701ff82c2105b6e2bcd85ea95fba2f79bbfd03539e2b4c412951d0bd4bf0581855cbcff519f54bd70d41c3b0a2f9bbe5fcf8aae3e87146bbe3c793a202ec6a5f5524a38c7fa7b6df5e90476add0f23a1539f71a2bdb6928320a0a01bdeb58527002d97c3826fcfdf7a6dc9e9a79909d71489e700531cc90d2f252aa97a97e9c1431a76fa785f03b42e60ee9f97fa6dedd63450c29b6f4d34fe3eb5c6b1d556ec510f6b6e6c8e31fede9a7ddfa939b8a9ad15b07e1e911cf2b358b776ee90de750f21b78eb8ad4ecc9c9859576c89856d2238b2feb87ca0a07f5f98bd655755bf2f6e66cb13c5b9cda6b50d605ddc4921c7a69f6fcf80aac42aaac56d5c98d6ec6b9f1e90d3183e9fc46623829bfef4b37de2d6d6d170c862ada69edb71f7723a98e6ad4bd289f42dfcb9cd90dd43cfdbd530a4e028320cdc846dd36e9ff6db77ffb8be74a93c98cce6c37ee9ca9ff1abd7d33b92dddd4d8ffaf2e0b703c21c342837a3460a8fe2002dae062608045068ace00a404e19d8d080527c354e368ce82406ab26eb61b0018c3b9991b036c07153560b53840bd0398c01e01e1c129b5b2e0efc55e32bae349338fa42a8a8c31427df5c18abc6f2f36aae5b55c78a648a6b4e3fdacd931184ea59d1e64cda61c0c0b2fb65e3ab07d70ff4b8988488acf3b25d56fa3039c123b28eff95e380c8dee9530e128920d476f47b28867b80fbb4e96af68a781b7e8bb9663c0130f8f752c7c9bbea0090e3e99b7797ff124528fc31a950e5fc651b85bdedf5ea5daa5ca41e2c2e7940ecb8e58448133afe9acaa6fb63badd2930240346a6eeda99aabb44822a41351c75d0725e36ad4d1fdc1086dbb9e6a5ee416d2df2ee372317b9541c6612d94cbb61357b2be0e37f981772c3880e02e2f4cc47e866
阅读全文 »

Live555提供HTTP/RTSP协议的多媒体流服务器和RTSP流代理中转。

下载源码编译

需要g++编译环境

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$ wget  http://www.live555.com/liveMedia/public/live555-latest.tar.gz
$ tar -xzvf live555-latest.tar.gz
$ cd live
$ ls
BasicUsageEnvironment config.iphoneos config.solaris-32bit liveMedia
config.armeb-uclibc config.iphone-simulator config.solaris-64bit Makefile.head
config.armlinux config.linux config.uClinux Makefile.tail
config.avr32-linux config.linux-64bit configure mediaServer
config.bfin-linux-uclibc config.linux-gdb COPYING proxyServer
config.bfin-uclinux config.linux-no-openssl COPYING.LESSER README
config.bsplinux config.linux-with-shared-libraries fix-makefile testProgs
config.cris-axis-linux-gnu config.macosx genMakefiles UsageEnvironment
config.cygwin config.macosx-no-openssl genWindowsMakefiles win32config
config.cygwin-for-vlc config.mingw genWindowsMakefiles.cmd win32config.Borland
config.freebsd config.openbsd groupsock WindowsAudioInputDevice
config.freebsd-no-openssl config.qnx4 hlsProxy
$ ./genMakefiles linux-64bit #linux-64bit这个参数是config.<后缀>获取得到的,是编译的目标平台
$ make

启动服务

阅读全文 »

目标

这次要编译一下FFmpeg的Android平台,采用版本v4.4.2,高版本有对 --target-os=android 支持,配置没那么麻烦。

环境

以前编译【ijplayer】库已经配置好环境,这次就在这个环境下编译:

  • Ubuntu 20.04
  • NDK 采用新的版本 21.3.6528147
  • FFmpeg-4.4.2
阅读全文 »

通过HTTP无法播放MP4视频?

有一个摄像机录制的视频文件record.mp4 ,放在web服务器上边下边播(http://mydomain.com/record.mp4 ),发现无法播放,下载到本地可以播放。
但是从抖音下载的视频douyin.mp4文件,同样放在web服务器上,可以边下边播(http://mydomain.com/douyin.mp4 )能正常播放。

都是MP4封装格式 ,这两个文件有什么不同呢?

通过 Mp4Explorer 这个软件,可以查看MP4的详细信息。

moov 是box参数列表,可以粗暴理解为 配置信息
mdata 是音视频数据

阅读全文 »

RTSP推流到本地

用UDP传输

1
2
3
4
5
6
$ ffmpeg -re -i h264.mp4 -vcodec copy -f h264 udp://127.0.0.1:8554

#循环文件推流(默认UDP)
ffmpeg -re -stream_loop -1 -i move.mp4 -vcodec copy -codec copy -f rtsp rtsp://192.168.0.223:554/test/
#循环文件推流(指定TCP)
ffmpeg -re -stream_loop -1 -i move.mp4 -vcodec copy -codec copy -rtsp_transport tcp -f rtsp rtsp://192.168.0.223:554/test/

在本地用ffplay播放(ffplay是ffmpeg的附带命令行工具)

1
2
$ ffplay  udp://127.0.0.1:8554
$ ffplay -f h264 udp://127.0.0.1:8554
阅读全文 »

由于项目【ijkplayer】提供编译好的库没有支持RTSP,而ijkplayer这个项目比较强大之处就是可以根据需要进行裁剪编译,所以我要自己编译一次Android版本,开启RTSP协议。

一、软件环境

  1. Ubuntu16.04 Server
  2. Android SDK
  3. NDK(不要安装最新的版本,14b版本能用)和cmake
  4. ijkplayer-k0.8.8 (commit cced91e3ae3730f5c63f3605b00d25eafcf5b97b)
  5. 其他一些编译c的环境,系统本身就有,就不一样列出。

编译所需软件大概有这些,引用参考文章的

1
2
$ sudo apt install vim openssh-server git curl wget tar unzip
$ sudo apt install build-essential openjdk-8-jdk yasm python
阅读全文 »

问题

在《VMWare为Ubuntu添加硬盘》一文中,我尝试为虚拟机增加一块磁盘挂载了 /data 路径下,这可以解决在“出现磁盘耗尽预警”之前增加磁盘,尽量将新的文件都放到 /data 路径下。

如果应用的数据无法迁移,需扩展根分区 / 的空间, 上面的方法则无法满足我的需求。

GParted

对于VMWare虚拟机,还可以考虑对虚拟机磁盘进行扩容,如:

阅读全文 »

CD/DVD 驱动器的类型:

  1. 如果选择操作系统为XP的话,CD/DVD 驱动器默认是IDE类型。
  2. 如果选择操作系统为Win7的话,CD/DVD 驱动器默认是SATA类型。

CD/DVD 驱动器底下有一个“高级”按钮,可以修改驱动器的类型。


升级到VM15后,在网上下载Windows7 、 XP的Chost镜像,一直提示“CDBOOT: Couldn’t find BOOTMER”,修改VMWare虚拟机的BIOS第一启动项为CD依然不行。

安装Linux系统(Ubuntu 20.04)却很顺利的。

查看下载的镜像文件,原来是没有boot.ini文件