还在为视频推流和拉流而烦恼吗?还在为安装nginx、ffmpeg而头疼吗?只需要两步就可以省去这些烦恼,第一步:推流 第二步:播放,你确定不入手么
一、添加媒体流服务依赖包
maven pom.xml依赖如下:
<!-- 添加本地依赖包 -->
<dependency>
<groupId>com.colis</groupId>
<artifactId>stream-api</artifactId>
<version>1.0-bronze</version>
<scope>system</scope>
<systemPath>${project.basedir}/src/main/resources/libs/stream-api-1.0-bronze.jar</systemPath>
</dependency>
二、服务初始化配置
1. springboot 项目配置如下:
import com.colis.stream.api.FlvStreamServer;
import com.colis.stream.common.bean.StreamNettyArgs;
import com.colis.stream.server.StreamNettyServer;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* <p> 描述:推流服务配置 </p>
*
* @author wlp
* @version 1.0.0
* @date 2022/2/28 17:40
*/
@Configuration
@ConditionalOnClass({StreamNettyServer.class, FlvStreamServer.class})
public class StreamConfig {
@Bean(name = "streamServer", initMethod = "start", destroyMethod = "stop")
public StreamNettyServer server() {
// 配置推流服务的端口
final StreamNettyArgs streamNettyArgs = StreamNettyArgs.builder().port(8899).build();
return new StreamNettyServer(streamNettyArgs);
}
@Bean
public FlvStreamServer flvStreamServer() {
// 将推流对象交给spring容器
return new FlvStreamServer();
}
}
2. 非springboot项目初始化
(1) 使用静态代码块初始化
import com.colis.stream.common.bean.StreamNettyArgs;
import com.colis.stream.server.StreamNettyServer;
/**
* <p> 描述:推流服务初始化 </p>
*
* @author wlp
* @version 1.0.0
* @date 2022/2/28 17:53
*/
public class StreamServer {
static {
final StreamNettyArgs streamNettyArgs = StreamNettyArgs.builder().port(8899).build();
new StreamNettyServer(streamNettyArgs).start();
}
}
(2) 使用构造方法初始化
import com.colis.stream.common.bean.StreamNettyArgs;
import com.colis.stream.server.StreamNettyServer;
/**
* <p> 描述:推流服务初始化 </p>
*
* @author wlp
* @version 1.0.0
* @date 2022/2/28 17:53
*/
public class StreamServer {
public StreamServer(){
final StreamNettyArgs streamNettyArgs = StreamNettyArgs.builder().port(8899).build();
new StreamNettyServer(streamNettyArgs).start();
}
}
三、使用方法
(1) springboot 项目如下
import com.colis.stream.api.FlvStreamServer;
import com.colis.stream.common.bean.FlvStreamParam;
import com.colis.stream.common.bean.FlvStreamResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* <p> 描述:测试推流 </p>
*
* @author wlp
* @version 1.0.0
* @date 2022/2/28 18:00
*/
@RestController
@RequestMapping("stream")
public class TestController {
@Autowired
FlvStreamServer flvStreamServer;
@GetMapping("start")
public FlvStreamResult start(FlvStreamParam flvStreamParam) {
return flvStreamServer.start(flvStreamParam);
}
@GetMapping("stop")
public String stop(FlvStreamParam flvStreamParam) {
flvStreamServer.stop(flvStreamParam.getStreamUrl(), flvStreamParam.getFlvStreamType());
return "关闭成功啦!";
}
}
(2) 非springboot 项目
import com.colis.stream.api.FlvStreamServer;
import com.colis.stream.common.bean.FlvStreamParam;
import com.colis.stream.common.bean.FlvStreamResult;
import com.colis.stream.common.bean.StreamNettyArgs;
import com.colis.stream.common.constant.FlvStreamType;
import com.colis.stream.server.StreamNettyServer;
import java.util.concurrent.TimeUnit;
/**
* <p> 描述:推流服务初始化 </p>
*
* @author wlp
* @version 1.0.0
* @date 2022/2/28 17:53
*/
public class StreamServer {
static {
final StreamNettyArgs streamNettyArgs = StreamNettyArgs.builder().port(8899).build();
new StreamNettyServer(streamNettyArgs).start();
}
public static void main(String[] args) throws InterruptedException {
TimeUnit.SECONDS.sleep(5);
final FlvStreamParam streamParam = new FlvStreamParam()
// 无人观看是否自动关闭推流
.setAutoClose(false)
// 播放的视频地址 可以是网络地址 也可以是本地视频
.setStreamUrl("D:\\MyWorks\\IdeaProgramFiles\\ColisProgramFiles\\VideoWorks\\EasyMedia\\video\\file.mp4")
.setFlvStreamType(FlvStreamType.FFMPEG);
final FlvStreamResult result = new FlvStreamServer().start(streamParam);
// 推流成功之后就会返回两个用来直接播放的地址
// 1. http播放地址
// 2. ws socket播放地址
System.out.println("播放:---》" + result.toString());
}
}
返回播放地址示例:
httpUrl:http://192.168.0.163:8899/stream/flv?stream_key=RDpcTXlXb3Jrc1xJZGVhUHJvZ3JhbUZpbGVzXENvbGlzUHJvZ3JhbUZpbGVzXFZpZGVvV29ya3NcRWFzeU1lZGlhXHZpZGVvXGZpbGUubXA0&stream_exec_type=ffmpeg
wsUrl:ws://192.168.0.163:8899/stream/flv?stream_key=RDpcTXlXb3Jrc1xJZGVhUHJvZ3JhbUZpbGVzXENvbGlzUHJvZ3JhbUZpbGVzXFZpZGVvV29ya3NcRWFzeU1lZGlhXHZpZGVvXGZpbGUubXA0&stream_exec_type=ffmpeg
四、播放效果
五、源代码地址
以上就是媒体服务的使用过程