2022年12月

下载,安装 FFmpeg

官网:http://ffmpeg.org
注意事项:下载时候不要选择 essential 版本,请选择 full 版本

安装:将解压后的 c:xxxbin 目录加入到环境变量

测试,附参数说明

转换、切片、生成索引一次性完成(效率太低,花费的时间长)
重要参数说明:
-c:v 指定视频的编码格式
-c:a 指定音频的编码格式
-hls_list_size 索引中保留的切片信息,默认值是 5 ,保留全部设为 0
-hls_time 10 每一个切片文件的时长,单位:秒

ffmpeg -i TESTVIDEO.MP4 -c:v libx264 -c:a aac -strict -2 -f hls -hls_list_size 0 -hls_time 10 index.m3u8

高效版

推荐生产中使用,高效版分为两个步骤:

1.将原视频整体转码为 ts 格式
ffmpeg -y -i Test.mp4  -vcodec copy -acodec copy -vbsf h264_mp4toannexb EncodeTest.ts
2. ts 文件切片并生成索引
ffmpeg -i EncodeTest.ts -c copy -map 0 -f segment -segment_list Index.m3u8 -segment_time 10 TestSeg_%3d.ts

其他

ts 文件并不能在 H5 的 <video> 中直接播放,可以借助 video.js 来实现播放

准备一张表

create database dbtest;
use dbtest;
drop table if exists user;
create table user(
  id int not null primary key auto_increment,
  name varchar(20)
);

编写存储过程

delimiter //
create procedure fill_talbe(in count int)
begin
  set @int:1;
  while @init <= count do
    insert into user values(null, concat("user-", @init))
    set @init = @init + 1;
  end while;
end //
delimiter ;

调用存储过程

drop procedure if exists fill_table;
call fill_table(1000000);

其他

delimiter 是个创建函数、存储过程、触发器的基本框架套路

delimiter //

begin

end //
delimiter ;

要实现 java socket 功能,需要两台机器:一个服务端 Server.java , 一个客户端 Client.java

服务端 Server.java

// Server.java
public class Server{
  ServerSocket server = new ServerSocket(10010);
  // 使用 accept() 方法监听服务器的 10010 端口,并获取一个 socket 对象
  Socket socket = server.accept();
 
  // 使用 socket 对象获取一个网络输入流
  InputStream is = socket.getInputStream();

  // 准备一个 1024B 的缓冲区
  byte[] bs = new byte[1024];

  // 读取客户端发送的字节流数据
  int len = is.read(bs);
  
  // 使用 new String() 构造,将字节数组转换为字符串
  System.out.println(new String(bs));
}

客户端 Client.java

// Client.java
public class Server{
  // new 一个 socket 对象
  Socket socket = new Socket("localhost", 10010);

  // 使用 socket 对象获取一个网络输出流
  OutputStream os = socket.getOutputStream();

  // 准备向服务端发送的数据
  String strForServer = "hello Server";
  
  // 使用 getBytes() 方法,将字符串转换为字节数组,并发送给服务端
  os.write(strForServer.getBytes());
}

注意事项:

1.Java Socket 编程中:发送使用网络输出流,接收使用网络输入流。并且,网络流的获取都是使用 Socket 对象。
获取网络输入流: socket.getInputStream()
获取网络输出流: socket.getOutputStream()

2.关于 Socket 对象的获取
客户端获取使用 new 的方式
服务端则是通过 ServerSocket 对象的 accept() 方法