小编Nic*_*Saw的帖子

如何使用 Rebar3 从本地文件系统添加依赖项?

我有两个 Erlang 应用程序:单个应用程序mylogger和伞应用程序myapp

我想包含 的当前版本作为mylogger的依赖项myapp

Rebar3 仅建议从 git 添加 deps,例如

{mylogger, {git, "https://github.com/someuser/mylogger", {branch, "master"}}}
Run Code Online (Sandbox Code Playgroud)

或来自 hex.pm。

如何从具有 rebar3 结构的文件系统添加我的自定义应用程序?

erlang rebar rebar3

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

GStreamer - RTSP 到 HLS / mp4

我尝试将 RTSP h.264 流保存到 HLS mp4 文件:

gst-launch-1.0 rtspsrc location="rtsp://....." ! rtph264depay ! h264parse ! matroskamux ! hlssink max-files=0 playlist-length=0 location="/home/user/ch%05d.mp4" playlist-location="/home/user/list.m3u8" target-duration=15
Run Code Online (Sandbox Code Playgroud)

结果 - 只有一个文件 ch00000.mp4,其中包括整个视频流(“目标持续时间”中的 3 分钟而不是 15 秒)。

如果我保存到 mpegtsmux / ts 文件 - 对于同一命令来说一切正常。

怎么了?提前致谢。

mp4 rtsp gstreamer http-live-streaming

4
推荐指数
1
解决办法
5015
查看次数

更改USB摄像头的比特率

我使用带有 h264 编解码器输出的 ELP USB 摄像头。

ffmpeg-获取视频流的命令:

ffmpeg -i /dev/video1 -c:v copy output.ts
Run Code Online (Sandbox Code Playgroud)

结果我有一个 4Mb 比特率的视频 - 这个值对于我的任务来说太高了。

我使用GSTreamer时也出现同样的情况:

gst-launch-1.0 v4l2src device=/dev/video1 ! video/x-h264,width=1280,height=720,framerate=30/1 ! mpegtsmux ! filesink location=output.ts
Run Code Online (Sandbox Code Playgroud)

我知道如果我们首先解码 h264 流,然后再次将其编码为 h264,则可以更改比特率。此操作对我的 NanoPI 设备的 CPU 资源要求过高。

主要问题是: 是否可以在不解码的情况下更改 USB 相机的比特率?

提前致谢!

video ffmpeg gstreamer raspberry-pi usb-camera

3
推荐指数
1
解决办法
2432
查看次数

erlang:如何从套接字接收 HTTP/RTSP 消息?

我想用 Erlang 管理 HTTP 或 RTSP 会话。

例如,RTSP 协议的标准会话如下所示:

OPTIONS rtsp://192.168.1.55/test/ RTSP/1.0\r\n
CSeq: 1\r\n
User-Agent: VLC media player (LIVE555 Streaming Media v2008.07.24)\r\n
...
PLAY rtsp://192.168.1.55/test/ RTSP/1.0\r\n
CSeq: 5\r\n
Session: 1\r\n
Range: npt=0.000-\r\n
User-Agent: VLC media player (LIVE555 Streaming Media v2008.07.24)\r\n
Run Code Online (Sandbox Code Playgroud)

每条消息的长度是不同的。对于 erlang,gen_server:listen使用一个选项{active, true}(允许获取无限数量的数据)或{active, false}(获取固定长度的数据)。

是否有推荐的方法来获取和解析此类长度可变的消息?

erlang http erlang-otp rtsp gen-tcp

3
推荐指数
1
解决办法
255
查看次数

Erlang gen_server:如何捕获错误?

我是Erlang开发的新手,我对流程关系很感兴趣.

如果我们连接两个进程P1和P2与process_flag(trap_exit, true)和使用建筑像Pid ! msgreceive .. after .. end-有可能赶上P1错误,如badarith第二进程P2.

但是如果我们使用gen_server与P2链接的进程P1,则P1在P2失败后终止.

那么,如何exit()使用gen_server 捕获错误?

提前致谢!

PS测试代码.

P1:

-module(test1).
-compile(export_all).
-behaviour(gen_server).

start() ->
  gen_server:start_link({local, ?MODULE}, ?MODULE, [], []).

init([]) -> Link = self(),
            spawn(fun() ->
              process_flag(trap_exit, true),
              link(Link),
              test2:start(Link)
            end),
            {ok, "lol"}.

handle_call(stop, From, State) ->
  io:fwrite("Stop from ~p. State = ~p~n",[From, State]),
  {stop, normal, "stopped", State};

handle_call(MSG, From, State) ->
  io:fwrite("MSG ~p from ~p. State = ~p~n",[MSG, From, State]),
  {reply, …
Run Code Online (Sandbox Code Playgroud)

erlang erlang-otp gen-server

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

Erlang / Rebar3 - 如何添加要发布但不启动的应用程序?

我有一个伞式项目,包括 main_app、app1、app2。main_app 可以单独工作,也可以与 app1 和 app2 一起使用并管理它们。

关于启动 app1 和 app2 的决定是在外部(特殊配置文件,由用户填写)。

我使用 rebar.config 的一部分:

{lib_dirs, ["apps"]}.
{sub_dirs, [
  "apps/main_app",
  "apps/app1",
  "apps/app2"
]}.

{relx, [{release, {main_app, "0.8.6"},
         [kernel,
          sasl,
          main_app]},
        {sys_config,  "./config/sys.config"},
        {vm_args,     "./config/vm.args"},
        {dev_mode, true},
        {include_src, true},
        {include_erts, false},
        {extended_start_script, true}]
}.

{profiles, [
  {prod, [
    {relx, [
      {dev_mode, false},
      {include_erts, false},
      {include_src, false},
      {sys_config,  "./config/prod_sys.config"},
      {vm_args,     "./config/prod_vm.args"}
    ]}
  ]}
]}.
Run Code Online (Sandbox Code Playgroud)

如果我使用sudo rebar3 shell- 我可以管理app1和app2。但是,如果我通过 - 打包发行版,sudo rebar3 as prod tar我会得到一个 tar 存档,其中不包含 app1 和 …

erlang rebar rebar3

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