美文网首页webrtc 音视频传输
webrtc 发送自定义视频

webrtc 发送自定义视频

作者: 自由侠 | 来源:发表于2020-05-30 20:21 被阅读0次

    webrtc 默认实现都是去系统获取音视频源,  而我们往往想要传输自己的音视频, 所以需要换源.

    要实现的效果是(可惜这是web的实现方式!):

    https://stackoverflow.com/questions/40363110/webrtc-stream-local-video-file

    https://docs.google.com/document/d/1JmWfOtUP6ZqsYJ--U8y0OtHkBt-VyjX4N-JqIjb1t78/edit

    而我需要的是C++的实现方式(native实现方式); 所以看上去只有看看代码了. 

    理论上, 我们想要实现自定义视频的发送,  可以从webrtc的视频发送流程入手:

    视频捕获 (yuv数据) --> 视频编码 (vp8数据) --> 视频打包(rtp-packet)及发送.

    目前准备一个webM视频源, 里边包含vp8视频流和opus音频流;  我们以发送vp8视频流为例来简单说明.

    可能的3种实现方法:

    1.  替换捕获的数据   (绕过编码, 直接发送)

    2.  替换编码数据  (不捕获原始数据,  不编码数据, 直接解析来自文件的编码数据, 发送)

    3.  直接发送自定义视频  (绕过捕获, 绕过编码)

    方案1分析:

          视频的捕获都是在添加video track的时候, 添加video source, video source添加 video capture.   然后替换capture里边的数据即可, 但是capture之后的数据流用的数据结构为VideoFrame, 该结构体没办法装下已编码的数据buffer和size.  它的size直接是根据视频宽和高计算出来的, 明显不能直接用.    放弃. 

    方案2分析:

    方案2可以实现我们的需求, 具体分析见实现篇. 

    方案3分析:

     为什么要有上边3种方式来分析, 而不是直接使用第三种方法, 简单粗暴呢?  这可能需要从webrtc的api说起(至少目前我还没有看到webrtc的api有发送已编码视频流的api).

    相关文章

      网友评论

        本文标题:webrtc 发送自定义视频

        本文链接:https://www.haomeiwen.com/subject/rtifzhtx.html