|
|
|
ARG ARCH
|
|
|
|
ARG IMAGE=ossrs/srs:ubuntu20
|
|
|
|
FROM ${ARCH}${IMAGE} AS build
|
|
|
|
|
|
|
|
ARG CONFARGS
|
|
|
|
ARG MAKEARGS
|
|
|
|
ARG INSTALLDEPENDS
|
|
|
|
ARG BUILDPLATFORM
|
|
|
|
ARG TARGETPLATFORM
|
|
|
|
ARG SRS_AUTO_PACKAGER
|
|
|
|
RUN echo "BUILDPLATFORM: $BUILDPLATFORM, TARGETPLATFORM: $TARGETPLATFORM, PACKAGER: ${#SRS_AUTO_PACKAGER}, CONFARGS: ${CONFARGS}, MAKEARGS: ${MAKEARGS}, INSTALLDEPENDS: ${INSTALLDEPENDS}"
|
|
|
|
|
|
|
|
# https://serverfault.com/questions/949991/how-to-install-tzdata-on-a-ubuntu-docker-image
|
|
|
|
ENV DEBIAN_FRONTEND noninteractive
|
|
|
|
|
|
|
|
# To use if in RUN, see https://github.com/moby/moby/issues/7281#issuecomment-389440503
|
|
|
|
# Note that only exists issue like "/bin/sh: 1: [[: not found" for Ubuntu20, no such problem in CentOS7.
|
|
|
|
SHELL ["/bin/bash", "-c"]
|
|
|
|
|
|
|
|
# Install depends tools.
|
|
|
|
RUN if [[ $INSTALLDEPENDS != 'NO' ]]; then \
|
|
|
|
apt-get update && apt-get install -y gcc make g++ patch unzip perl git libasan5; \
|
|
|
|
fi
|
|
|
|
|
|
|
|
# Copy source code to docker.
|
|
|
|
COPY . /srs
|
|
|
|
WORKDIR /srs/trunk
|
|
|
|
|
|
|
|
# Build and install SRS.
|
|
|
|
# Note that SRT is enabled by default, so we configure without --srt=on.
|
|
|
|
# Note that we have copied all files by make install.
|
Upgrade hls.js and set in low latency mode. v6.0.112 (#3924)
HLS typically has a delay of around 30 seconds, roughly comprising three
segments, each lasting 10 seconds. We can reduce the delay to about 5
seconds by lowering the segment duration to 2 seconds and starting
playback from the last segment, achieving a stable delay.
Of course, this requires setting the OBS's GOP to 1 second, and the
profile to baseline, preset to fast, and tune to zerolatency.
Additionally, updating a few configurations in the hls.js player is
necessary, such as setting it to start playback from the last segment,
setting the maximum buffer, and initiating accelerated playback to
reduce latency.
---------
Co-authored-by: chundonglinlin <chundonglinlin@163.com>
Co-authored-by: john <hondaxiao@tencent.com>
1 year ago
|
|
|
RUN ./configure ${CONFARGS} && make ${MAKEARGS} && make install
|
|
|
|
|
|
|
|
############################################################
|
|
|
|
# dist
|
|
|
|
############################################################
|
|
|
|
FROM ${ARCH}ubuntu:focal AS dist
|
|
|
|
|
|
|
|
ARG BUILDPLATFORM
|
|
|
|
ARG TARGETPLATFORM
|
|
|
|
RUN echo "BUILDPLATFORM: $BUILDPLATFORM, TARGETPLATFORM: $TARGETPLATFORM"
|
|
|
|
|
|
|
|
# Expose ports for streaming @see https://github.com/ossrs/srs#ports
|
Support HTTP-API for fetching reload result. v5.0.176 v6.0.71 (#3779)
## Reload Error Ignore
During a Reload, several stages will be passed through:
1. Parsing new configurations: Parse.
2. Transforming configurations: Transform.
3. Applying configurations: Apply.
Previously, any error at any stage would result in a direct exit, making
the system completely dependent on configuration checks:
```bash
./objs/srs -c conf/srs.conf -t
echo $?
#0
```
Optimized to: If an error occurs before applying the configuration, it
can be ignored. If an error occurs during the application of the
configuration, some of the configuration may have already taken effect,
leading to unpredictable behavior, so SRS will exit directly.
## Reload Fetch API
Added a new HTTP API to query the result of the reload.
```nginx
http_api {
enabled on;
raw_api {
enabled on;
allow_reload on;
}
}
```
```bash
curl http://localhost:1985/api/v1/raw?rpc=reload-fetch
```
```json
{
"code": 0,
"data": {
"err": 0,
"msg": "Success",
"state": 0,
"rid": "0s6y0n9"
}
}
{
"code": 0,
"data": {
"err": 1023,
"msg": "code=1023(ConfigInvalid) : parse file : parse buffer containers/conf/srs.release-local.conf : root parse : parse dir : parse include buffer containers/data/config/srs.vhost.conf : read token, line=0, state=0 : line 3: unexpected end of file, expecting ; or \"}\"",
"state": 1,
"rid": "0g4z471"
}
}
```
This way, you can know if the last reload of the system was successful.
---------
Co-authored-by: Haibo Chen <495810242@qq.com>
1 year ago
|
|
|
EXPOSE 1935 1985 8080 5060 9000 8000/udp 10080/udp
|
|
|
|
|
|
|
|
# FFMPEG 4.1
|
|
|
|
COPY --from=build /usr/local/bin/ffmpeg /usr/local/srs/objs/ffmpeg/bin/ffmpeg
|
|
|
|
# SRS binary, config files and srs-console.
|
|
|
|
COPY --from=build /usr/local/srs /usr/local/srs
|
|
|
|
|
|
|
|
# Test the version of binaries.
|
|
|
|
RUN ldd /usr/local/srs/objs/ffmpeg/bin/ffmpeg && \
|
|
|
|
/usr/local/srs/objs/ffmpeg/bin/ffmpeg -version && \
|
|
|
|
ldd /usr/local/srs/objs/srs && \
|
|
|
|
/usr/local/srs/objs/srs -v
|
|
|
|
|
|
|
|
# Default workdir and command.
|
|
|
|
WORKDIR /usr/local/srs
|
Refine docker detect mechenism. v5.0.190 v6.0.90 (#3758)
When using Docker, logs are usually printed to console (stdout and
stderr). However, since Docker detection occurs late, after log
initialization, the default log output may be incorrect. In Docker, logs
may still be written to a file instead of the console as expected.
Additionally, the Dockerfile has been improved with a new environment
variable `SRS_IN_DOCKER=on` to clearly indicate a Docker environment. If
automatic Docker detection fails, the configuration will be read, and
this variable will correctly inform SRS that it's in a Docker
environment.
Lastly, the default configuration values have been improved for Docker
environments. By default, `SRS_LOG_TANK=console` and daemon mode is
disabled.
---------
Co-authored-by: john <hondaxiao@tencent.com>
1 year ago
|
|
|
ENV SRS_DAEMON=off SRS_IN_DOCKER=on
|
Solve the problem of inaccurate HLS TS duration. v5.0.187 v6.0.87 (#3824)
1. The comment on the ratio configuration says it can affect the slice
duration, but there is no effect after configuring it.
2. The default hls_td_ratio is 1.5, and after setting it to 1, the
duration is still slightly more than 10 seconds.
3. Even if the GOP is an integer, like 1 second, the slice is still a
non-integer, like 0.998 seconds, which seems a bit unreliable.
4. In the duration of the TS in the m3u8 file, it is one frame less than
the duration of the slice.
5. Set hls_dispose to 120s to dispose HLS files when no stream.
6. Use docker.conf for docker.
Before this patch:
```
#EXTINF:10.983, no desc
livestream-0.ts?hls_ctx=3p095hq0
```
After this patch:
```
#EXTINF:10.000, no desc
livestream-0.ts?hls_ctx=3p095hq0
```
Note: If the fragment is set to 10 seconds, but the GOP size cannot be
divided by 10, such as not 1, 2, 5, or 10, then the duration of ts will
still be more than 10 seconds.
---------
Co-authored-by: john <hondaxiao@tencent.com>
1 year ago
|
|
|
CMD ["./objs/srs", "-c", "conf/docker.conf"]
|
|
|
|
|