Find Jobs
Hire Freelancers

gstreamer + golang pipeline

$30-250 USD

已关闭
已发布15 天前

$30-250 USD

货到付款
Purpose The purpose of this implementation is to provide a means to connect to an IP camera over RTSP and ingest the video+audio streams using gstreamer with golang and the go-gst bindings. Once the stream is ingested we need to break-out in to children pipelines to perform various tasks such as creating HLS segments and persisting to disk for future playback and transcoding H.265 to H.264 so that the stream is compatible with the WebRTC requirement of H.264 support. Functionality The functionality demonstrated in the above diagram is broken out to: Ingest Pipeline Responsible for connecting to the IP camera over the RTSP protocol using the rtspsrc element. Once connected the pipeline needs to prepare the stream for consumption by lower pipelines as below. Segment Pipeline Take the input stream and output HLS segment files which will be persisted to disk over NFS. It is important to note that we need a hook so that when the files are written we can send a notification message over the message broker announcing the segment file size, name, etc. Transcode Pipeline This child pipeline, when activated, is responsible for transcoding the input H.265 stream to H.264 to prepare it to be consumed over WebRTC. Requirements Solution must be implemented using golang. Solution must use the go-gst library for accessing gstreamer bindings. Code must be documented. Pipeline must be construct by code. Do NOT expect to take a pipeline string and parse it as we will need low level access to each element! --- Similar Example // This example demonstrates the use of GStreamer's pad probe APIs. // // Probes are callbacks that can be installed by the application and will notify // the application about the states of the dataflow. Those are mostly used for // changing pipelines dynamically at runtime or for inspecting/modifying buffers or events // // |-[probe] // / // {audiotestsrc} - {fakesink} package main import ( "errors" "fmt" "math" "[login to view URL]" "[login to view URL]" "[login to view URL]" ) func padProbes(mainLoop *[login to view URL]) error { [login to view URL](nil) // Parse the pipeline we want to probe from a static in-line string. // Here we give our audiotestsrc a name, so we can retrieve that element // from the resulting pipeline. pipeline, err := [login to view URL]( "audiotestsrc name=src ! audio/x-raw,format=S16LE,channels=1 ! fakesink", ) if err != nil { return err } // Get the audiotestsrc element from the pipeline that GStreamer // created for us while parsing the launch syntax above. // // TODO: There are some discrepancies still between methods that check the nil // value and return an error, versus those that will instead just return nil. // Need to settle on one way or the other. src, err := [login to view URL]("src") if err != nil { return err } // Get the audiotestsrc's src-pad. srcPad := [login to view URL]("src") if srcPad == nil { return [login to view URL]("src pad on src element was nil") } // Add a probe handler on the audiotestsrc's src-pad. // This handler gets called for every buffer that passes the pad we probe. [login to view URL]([login to view URL], func(self *[login to view URL], info *[login to view URL]) [login to view URL] { // Interpret the data sent over the pad as a buffer. We know to expect this because of // the probe mask defined above. buffer := [login to view URL]() // At this point, buffer is only a reference to an existing memory region somewhere. // When we want to access its content, we have to map it while requesting the required // mode of access (read, read/write). // This type of abstraction is necessary, because the buffer in question might not be // on the machine's main memory itself, but rather in the GPU's memory. // So mapping the buffer makes the underlying memory region accessible to us. // See: [login to view URL] mapInfo := [login to view URL]([login to view URL]) defer [login to view URL]() // We know what format the data in the memory region has, since we requested // it by setting the fakesink's caps. So what we do here is interpret the // memory region we mapped as an array of signed 16 bit integers. samples := [login to view URL]() if len(samples) == 0 { return [login to view URL] } // For each buffer (= chunk of samples) calculate the root mean square. var square float64 for _, i := range samples { square += float64(i * i) } rms := [login to view URL](square / float64(len(samples))) [login to view URL]("rms:", rms) return [login to view URL] }) // Start the pipeline [login to view URL]([login to view URL]) // Block on messages coming in from the bus instead of using the main loop for { msg := [login to view URL]().TimedPop([login to view URL]) if msg == nil { break } if err := handleMessage(msg); err != nil { return err } } return nil } func handleMessage(msg *[login to view URL]) error { defer [login to view URL]() switch [login to view URL]() { case [login to view URL]: return [login to view URL]("end-of-stream") case [login to view URL]: return [login to view URL]() } return nil } func main() { [login to view URL](padProbes) }
项目 ID: 38064744

关于此项目

6提案
远程项目
活跃11 天前

想赚点钱吗?

在Freelancer上竞价的好处

设定您的预算和时间范围
为您的工作获得报酬
简要概述您的提案
免费注册和竞标工作
6威客以平均价$63 USD来参与此工作竞价
用户头像
Hi , How are you doing? As a professional developer with expertise in Golang and Video Streaming, I eagerly anticipate the opportunity to complete this project for you. Please drop me a message to discuss the project detail. Thank you for considering my services.
$50 USD 在6天之内
0.0 (0条评论)
0.0
0.0
用户头像
Hello nvrai, I am Sadat Saeed, with 8 years of experience in Video Streaming. I have carefully read the requirements for the project. I propose to implement the gstreamer + golang pipeline as described in the project description. Using golang and the go-gst library, I will create the ingest pipeline, segment pipeline, and transcode pipeline to achieve the desired functionality. Please review my portfolio https://www.freelancer.ca/u/DGM999 and let's discuss further details in chat. Best regards, Sadat Saeed
$85 USD 在3天之内
0.0 (0条评论)
0.0
0.0
用户头像
Hello nvrai, I am Shahzaib, with over 5 years of experience in Video Streaming and Golang. I have carefully reviewed the requirements for the gstreamer + golang pipeline project. To achieve the desired functionality, I propose to create an ingest pipeline using gstreamer with go-gst bindings to connect to the IP camera over RTSP. This will be followed by the creation of child pipelines for tasks such as generating HLS segments and transcoding H.265 to H.264 for WebRTC compatibility. The code will be well-documented and constructed programmatically to ensure low-level access to each element. You can find examples of my previous work in my portfolio: https://www.freelancer.co.uk/u/theshahzaibkhan Regards, Shahzaib
$100 USD 在5天之内
0.0 (0条评论)
0.0
0.0
用户头像
With a strong foundation in GStreamer and ample experience working with RTSP, I am well-equipped to handle your gstreamer + golang pipeline project. My expertise extends to incorporating go-gst bindings for optimal execution in Golang. You emphasized the need for constructing the pipeline by code rather than relying on string parsing, behind this choice is a necessity for retaining low-level control over each element, and this is exactly what working with me guarantees. Another vital requirement you listed is proper documentation. Understanding the significance of this, I always ensure my code is well-documented, making it easier for you to understand and maintain the implementation even after completion. Additionally, my collaborative approach will ensure continuous communication throughout the project, allowing me to remain aligned with your vision while providing valuable input backed by my extensive skill set. Ultimately, choosing me means entrusting your project to a video streaming professional who combines technical proficiency with creative vision. Thus, while upholding industry standards and maintaining up-to-date knowledge on tools like Adobe Premiere Pro, After Effects, and Final Cut Pro, I also hold a creative flair vital for standing out from the crowded digital landscape. Let's work together to craft an optimal solution that meets all your unique needs.
$30 USD 在1天之内
0.0 (0条评论)
0.0
0.0
用户头像
Hello, I have thoroughly reviewed your PDF and am excited to apply for the job. As a senior Golang developer, I bring experience in WebRTC, video streaming, and other related technologies to the table. I am eager to contribute my skills and expertise to your project. With regards, Meles Zawude
$80 USD 在5天之内
0.0 (0条评论)
0.0
0.0

关于客户

UNITED STATES的国旗
Spring, United States
0.0
0
会员自3月 20, 2023起

客户认证

谢谢!我们已通过电子邮件向您发送了索取免费积分的链接。
发送电子邮件时出现问题。请再试一次。
已注册用户 发布工作总数
Freelancer ® is a registered Trademark of Freelancer Technology Pty Limited (ACN 142 189 759)
Copyright © 2024 Freelancer Technology Pty Limited (ACN 142 189 759)
加载预览
授予地理位置权限。
您的登录会话已过期而且您已经登出,请再次登录。