博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
go语言与java nio通信,解析命令调用上下文拉起ffmpeg,并引入livego做的简单流媒体服务器...
阅读量:6408 次
发布时间:2019-06-23

本文共 1702 字,大约阅读时间需要 5 分钟。

想给项目组推一套视频的播放方案,用于播放ip camera的的实时流,网上有很多人已经做过了,我这边是使用golang,拉起上下文调用ffmpeg命令,获取rtsp转到livego的服务上,然后界面找我获取播放流的方式。

实现如下:

调用命令行的部分如下

package ffmpegimport (    "bytes"    "context"    "os"    "os/exec"    "syscall"    "time")type C struct {    Name   string    ctx    context.Context    cancel context.CancelFunc    cmd    *exec.Cmd}func New(name string, args []string) C {    var c C    c.Name = name    c.ctx, c.cancel = context.WithCancel(context.Background())    c.cmd = exec.CommandContext(c.ctx, "ffmpeg", args...)    c.cmd.SysProcAttr = &syscall.SysProcAttr{HideWindow: true}    c.cmd.Stdout = os.Stdout    return c}func (c *C) Run() error {    return c.cmd.Start()}func (c *C) RunThenClose(ch chan int) error {    err := c.cmd.Start()    c.cancel()    //tell go i take it    return err}func (c *C) Close() {    c.cancel()}//run and wait for backfunc RunAndClose(args []string, callback func(c, t time.Duration)) error {    cmd := exec.Command("ffmpeg", args...)    if callback == nil {        var cmdErr bytes.Buffer        cmd.Stderr = &cmdErr        if err := cmd.Run(); err != nil {            return extractError(err, cmdErr.String())        }        return nil    }    // ffmpeg stdout is stderr    stderr, err := cmd.StderrPipe()    if err != nil {        return err    }    w, err := newWatcher(stderr, callback)    if err != nil {        return err    }    defer w.Close()    defer cmd.Process.Wait()    if err := cmd.Run(); err != nil {        return err    }    return nil}
ffmpeg.go

 

工程路径

https://github.com/wenchengyao/smpNVR.git

 

实现效果:

每次启动,更具配置,连接到我们java nio开发的服务端,接收用户发起的界面请求,

解析请求进行视频直流、抓图等

 

界面上的播放效果:

ffmpeg命令开启rtsp的连接还非常稳定,我试过连续播放1400分钟

 

 

转载于:https://www.cnblogs.com/wency/p/9519688.html

你可能感兴趣的文章
PHP语言 -- Smarty缓存
查看>>
谈谈JavaScript中function多重理解
查看>>
窗口置顶 - 仿TopWind
查看>>
(转)通过注册表修改VC6.0的字体
查看>>
oracle 查询 函数练习2
查看>>
浅析如何学习基于ARM平台的嵌入式系统(转载)
查看>>
AQS(AbstractQueuedSynchronizer)应用案例-02
查看>>
Javascript-闰年javascript的判断
查看>>
17.07.28 SQL 函数
查看>>
创建型设计模式之单例模式(Singleton)
查看>>
自定义JavaScript字典类jsdictionary.js
查看>>
分类与监督学习
查看>>
2018省赛模拟赛1(2017浙江省赛)
查看>>
python进制转换(二丶八丶十丶十六)
查看>>
linux包之iproute之ss命令
查看>>
ListView与ScrollView冲突的4种解决方案
查看>>
python中的import
查看>>
26. 使用fgetc()/fputc()实现文件的拷贝
查看>>
如何成为一个优秀的系统架构师
查看>>
18个有趣的API供你的前端开发测试之用
查看>>