我有两个 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 结构的文件系统添加我的自定义应用程序?
我尝试将 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 文件 - 对于同一命令来说一切正常。
怎么了?提前致谢。
我使用带有 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 相机的比特率?
提前致谢!
我想用 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开发的新手,我对流程关系很感兴趣.
如果我们连接两个进程P1和P2与process_flag(trap_exit, true)和使用建筑像Pid ! msg和receive .. 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) 我有一个伞式项目,包括 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 ×4
erlang-otp ×2
gstreamer ×2
rebar ×2
rebar3 ×2
rtsp ×2
ffmpeg ×1
gen-server ×1
gen-tcp ×1
http ×1
mp4 ×1
raspberry-pi ×1
usb-camera ×1
video ×1