首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用videojs的直播-录制和videojs

使用videojs的直播-录制和videojs
EN

Stack Overflow用户
提问于 2020-05-15 12:52:32
回答 1查看 1.1K关注 0票数 0

我正在尝试在我的应用程序中进行视频聊天,并使用videojs-record + videojs来实现。videojs-record用于录制网络摄像头(已在工作),videojs用于在另一端再现视频。通过使用带有timeSlice属性的timestamp事件,我成功地将录制的视频按秒拆分。

代码语言:javascript
复制
this.player = videojs('#myVideo', this.options, () => {});

var player = this.player
var that = this

this.player.on('startRecord', () => {
    that.segment = 0
});

player.on('timestamp', function() {
    if (player.recordedData && player.recordedData.length > 0) {
        var binaryData = player.recordedData[player.recordedData.length - 1]
        that.$emit('dataVideoEvent', {video:binaryData, segment_index:that.segment})
        that.segment += 1
    }
});

因此,我已经设法将上述片段上传到亚马逊的S3,并使用Python端点返回包含上传文件的HLS文件:

代码语言:javascript
复制
duration = 1
totalDuration = len(list)
string = ('#EXTM3U\n'
            '#EXT-X-PLAYLIST-TYPE:EVENT\n'
            '#EXT-X-TARGETDURATION:3600\n'
            '#EXT-X-VERSION:3\n'
            '#EXT-X-MEDIA-SEQUENCE:0\n')
ended = False
now = datetime.utcnow().replace(tzinfo=pytz.utc)
for index, obj in enumerate(list):
    url = {retrieving url based in obj}
    string += '#EXTINF:{duration}, no desc\n{url}\n'.format(duration=duration, url=url)
    ended = (obj.created_at.replace(tzinfo=pytz.utc) + timedelta(seconds=10)) < now

if ended:
    string += '#EXT-X-ENDLIST'

不过,那个HLS文件不起作用。videojs播放器显示视频的正确完整时间,但永远不会开始播放,也不会记录错误。如果我尝试使用Bitmovin's player demo重现视频,它会显示SOURCE_MANIFEST_INVALID。

我还尝试创建一个XML+DASH文件,而不是HLS文件,但它不能很好地工作。我还尝试将videojs-record videoMimeType属性更改为其他值,如video/webm;codecs=vp8,opusvideo/mp2t;codecs=vp8,opus,但也没有更改任何内容。

此外,返回HLS文件的@action有一个使用该渲染器的renderer_classes属性:

代码语言:javascript
复制
class HLSRenderer(BaseRenderer):
    media_type = 'application/x-mpegurl'
    format = 'm3u8'
    level_sep = '.'
    header = None
    labels = None
    writer_opts = None

    def render(self, data, media_type=None, renderer_context={}, writer_opts=None):
        return data

最后,我在S3中以这种方式配置了CORS,以防万一:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
    <AllowedOrigin>*</AllowedOrigin>
    <AllowedMethod>GET</AllowedMethod>
    <AllowedMethod>HEAD</AllowedMethod>
    <MaxAgeSeconds>3000</MaxAgeSeconds>
    <AllowedHeader>Range</AllowedHeader>
</CORSRule>
</CORSConfiguration>

顺便说一下,@操作通常是被屏蔽的,所以只有预期的用户才能看到它,但现在我已经将它的permission_classes值改为AllowAny,这样我就可以在像Bitmovin这样的网站上进行测试了。

我到底做错了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-02 13:29:49

我放弃了,最终使用Jitsi而不是videojs-record。我不得不在Vue中使用iframe运行它,但它成功了,而其他所有方法都失败了。

在过去的18天里,我一直在尝试自己制作一个直播流,当我几乎可以在一个晚上让Jitsi与我的项目一起工作时。我推荐他们的Docker,它很容易设置。

https://github.com/jitsi/docker-jitsi-meet

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61812001

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档