java 直播媒体流服务(ffmpeg、javacv)支持本地视频、网路视频

还在为视频推流和拉流而烦恼吗?还在为安装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

 四、播放效果

五、源代码地址

colis/colis-stream

以上就是媒体服务的使用过程

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值