小编Mul*_*ync的帖子

如何使用GStreamer直接流式传输到网络浏览器?

网上有很多使用 GStreamer 管道与 NodeJS 的“tcpclientsink”或“udpsink”的示例,以使用 GStreamer 管道输出到 Web 浏览器。

但我找不到任何示例或文档可以清楚地解释如何使用 webrtcbin 元素与 NodeJS 服务器将流发送到 Web 浏览器。(webrtcbin 的替代品也可以。)

我有以下 GStreamer 管道:

gst-launch-1.0 videotestsrc  \
! queue ! vp8enc ! rtpvp8pay \
! application/x-rtp,media=video,encoding-name=VP8,payload=96 \
! webrtcbin name=sendrecv
Run Code Online (Sandbox Code Playgroud)

有人可以帮助使用基于 NodeJS 的服务器使用此管道以将流显示到 Web 浏览器上吗?

这是一个类似的示例,但它使用tcpclientsinkhttps ://tewarid.github.io/2011/04/26/stream-live-webm-video-to-browser-using-node.js-and-gstreamer.html

gstreamer node.js http-live-streaming

8
推荐指数
1
解决办法
2万
查看次数

我对符号表和重定位表的使用的理解是否正确?

我目前很难理解链接/加载概念。

您能告诉我以下关于符号和重定位表的使用的陈述是否正确?

  1. 在可重定位目标文件中,符号表必须包含从其他目标文件访问/调用的变量和函数的条目。未在目标文件外部使用的变量和函数的列表是可选的。
    • 这意味着如果程序仅包含一个目标文件,则可以省略符号表。
  2. 在可重定位目标文件中,重定位表保存在加载期间必须更新的汇编代码的所有位置的地址。
  3. 在不可重定位目标文件中,可以省略重定位表。但是,然后必须将对象加载到硬编码到指令中的地址空间中。

谢谢你的时间!

c symbols object relocation

6
推荐指数
1
解决办法
1276
查看次数

为什么部分名称以点开头?关于命名部分的问题

直到最近,我认为部分名称通常必须以点开头.。但是,在研究我的裸机 C-IDE 的示例链接器文件时,我注意到似乎有一个例外:COMMON.

.text :
{
    KEEP(*(.isr_vector))
    *(.text*)

    KEEP(*(.init))
    KEEP(*(.fini))

    /* .ctors */
    *crtbegin.o(.ctors)
    *crtbegin?.o(.ctors)
    *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors)
    *(SORT(.ctors.*))
    *(.ctors)

    /* .dtors */
    *crtbegin.o(.dtors)
    *crtbegin?.o(.dtors)
    *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors)
    *(SORT(.dtors.*))
    *(.dtors)

    *(.rodata*)

    KEEP(*(.eh_frame*))
} > ROM

.bss (NOLOAD):
{
    *(.bss*)
    *(COMMON)
} > RAM
Run Code Online (Sandbox Code Playgroud)

这使我得出结论,以 开头的部分名称.似乎只是约定而不是要求

所以,我的问题是:

  • 节名称以点开头的原因是什么?我想建立这个公约有一个(也许是历史的?)原因。
  • 为什么例外COMMON
  • 为什么通常输出节与输入节同名?.bss我的.bss输出部分实际上包含了一个非部分,这让我感到相当困惑。同去同.text部分。.text我的.text输出部分中包含大量非部分。为什么只是给他们自己的输出部分并不常见?这不是更合乎逻辑吗?

这背后是否有任何真正的原因,或者只是它的方式

c linker ld sections

6
推荐指数
0
解决办法
801
查看次数

是否存在不使用二进制补码表示负值的架构?

使用二进制补码在内存中存储负值的好处是众所周知的,并在本板中进行了充分讨论.

因此,我想知道:

是否存在一些架构,它们选择了一种不同的方式来表示内存中的负值,而不是使用两个补码?如果是这样的话:原因是什么?

cpu-architecture dataformat

5
推荐指数
1
解决办法
447
查看次数

阿达:为什么"A"......"F""不是离散的?

程序文本

type T is array ("A" .. "F") of Integer;
Run Code Online (Sandbox Code Playgroud)

编译器控制台输出

hello.adb:4:22: discrete type required for range
Run Code Online (Sandbox Code Playgroud)

如果我的理解是正确的,那么Ada参考手册第3.6章第9 就是编译器引发编译错误的原因:

array_type_definition中的每个index_subtype_definition或discrete_subtype_definition定义索引子类型; 它的类型(索引类型)应该是离散的.

因此,为什么"A" .. "F"discrete呢?究竟是discrete什么意思?

背景信息

下面引用了数组类型定义的语法要求.资料来源:Ada参考手册

array_type_definition ::= unconstrained_array_definition | constrained_array_definition

constrained_array_definition ::= array (discrete_subtype_definition {, discrete_subtype_definition}) of component_definition

discrete_subtype_definition ::= discrete_subtype_indication | range

range ::=  range_attribute_reference | simple_expression .. simple_expression

simple_expression ::= [unary_adding_operator] term {binary_adding_operator term}

term ::= factor {multiplying_operator factor}

factor ::= primary [** primary] | abs …
Run Code Online (Sandbox Code Playgroud)

arrays types ada range

5
推荐指数
1
解决办法
368
查看次数

如何读取目标文件的重定位记录

我正在尝试理解C工具链的链接阶段.我编写了一个示例程序并剖析了生成的目标文件.虽然这有助于我更好地理解所涉及的过程,但有些事情对我来说仍然不清楚.

这是:

第1部分:初始化变量的处理.

这是正确的,那些重定位表条目......

RELOCATION RECORDS FOR [.text]:
OFFSET   TYPE              VALUE
0000002b dir32             .data
00000035 dir32             .data
0000003f dir32             .data
Run Code Online (Sandbox Code Playgroud)

...基本上是告诉链接器,使存储在地址偏移2b,35并且3f.text不是绝对不会忽略,但相对不会忽略(=偏移)有关.data?据我所知,这使链接器能够

  • 将这些相对地址转换为绝对地址以创建不可重定位目标文件,
  • 或者只是相应地调整它们,以防目标文件与其他目标文件链接.

第2部分:未初始化变量的处理.

我不明白为什么未初始化的变量与初始化变量的处理方式不同.为什么寄存器地址存储在操作码中,

  • 等于所有未初始化的变量(0x0,0x0和0x0),同时为
  • 所有初始化变量(0x0,0x4和0x8)都不同?

他们的重定位表条目的值字段对我来说完全不清楚.我原本期望在.bss那里引用该部分.

RELOCATION RECORDS FOR [.text]:
OFFSET   TYPE              VALUE
0000000d dir32             _var1_zeroed-0x00000004
00000017 dir32             _var2_zeroed-0x00000004
00000021 dir32             _var3_zeroed-0x00000004
Run Code Online (Sandbox Code Playgroud)

c linker object relocation

5
推荐指数
1
解决办法
1434
查看次数

如何使用 crt0.o 在我的裸机 C 程序中设置 .bss 和 .data?

我成功地编写了一个在我的 STM32F4 上运行的裸机 C 程序。没什么特别的,只是通常的led-blinky-program。在这个项目中,我编写了初始化例程,用于清除该.bss部分并.data自己初始化该部分。

这并不复杂。在链接器脚本中,我只是指示链接器创建一些标记.dataand.bss部分的开始和结束的符号。

.data 0x20001000 :
    ALIGN(4)
    {
        __etext = LOADADDR(.data);
        __data_start__ = ADDR(.data) ;
        *(.data*) ;
        __data_end__ = ADDR(.data) + SIZEOF(.data) ;
    } >RAM AT>ROM


.bss :
    ALIGN(4)
    {
        __bss_start__ = ADDR(.bss) ;
        *(.bss*) ;
        __bss_end__ = ADDR(.bss) + SIZEOF(.bss) ;
    } >RAM
Run Code Online (Sandbox Code Playgroud)

然后我在我的代码中使用了这些符号:

extern unsigned int __etext;
extern unsigned int __data_start__;
extern unsigned int __data_end__;
extern unsigned int __bss_start__;
extern unsigned int __bss_end__;


void Reset_Handler()
{
    unsigned …
Run Code Online (Sandbox Code Playgroud)

c embedded crt bare-metal cortex-m

5
推荐指数
1
解决办法
1103
查看次数

为什么无符号整数变量通常不受整数提升的影响?

在阅读了关于整数提升的相关问题之后,似乎是整数提升或仅适用于小整数类型(例如short int或)的常见理解char.

但是,我想知道为什么不应该将unsigned intie值的变量15提升为一个int.毕竟,它的转换等级等于int和unsigned int的等级,如下面引用中的语句(1)所要求的那样.

作为一个int可以代表值15而没有任何问题(在我知道的所有平台上),它应该转换为int.

整数促销

如果可以使用int或unsigned int,则可以在表达式中使用以下内容:

  1. 具有整数类型的对象或表达式,其整数转换等级小于或等于int和unsigned int的等级.

  2. _Bool,int,signed int或unsigned int类型的位字段.

如果int可以表示原始类型的所有值(由宽度限制,对于位字段),则该值将转换为int; 否则,它将转换为unsigned int.这些被称为整数促销.整数促销不会更改所有其他类型.

c promotions

2
推荐指数
1
解决办法
128
查看次数