Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[pull] master from mpromonet:master #1

Open
wants to merge 26 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .circleci/config.yml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
defaults: &defaults
working_directory: /webrtc-streamer
docker:
- image: cimg/base:2022.04
- image: cimg/base:2024.12
user: root

version: 2.1
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/cpp-cross-linux-arm.yml
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ jobs:
cpack
echo "artifactPath=$(ls *.tar.gz)" >> $GITHUB_ENV

- uses: actions/upload-artifact@v3
- uses: actions/upload-artifact@v4
with:
name: ${{ env.artifactPath }}
path: ${{ env.artifactPath }}
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/cpp-linux.yml
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ jobs:
cpack
echo "artifactPath=$(ls *.tar.gz)" >> $GITHUB_ENV

- uses: actions/upload-artifact@v3
- uses: actions/upload-artifact@v4
with:
name: ${{ env.artifactPath }}
path: ${{ env.artifactPath }}
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/cpp-macos.yml
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ jobs:
cpack
echo "artifactPath=$(ls *.tar.gz)" >> $GITHUB_ENV

- uses: actions/upload-artifact@v3
- uses: actions/upload-artifact@v4
with:
name: ${{ env.artifactPath }}
path: ${{ env.artifactPath }}
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/cpp-windows.yml
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ jobs:
run: |
dir /b /s "C:\Program Files (x86)\vcvars64.bat"
call "%MSVC_PATH%\VC\Auxiliary\Build\vcvars64.bat"
set "PATH=%GITHUB_WORKSPACE%\depot_tools;%GITHUB_WORKSPACE%\..\webrtc\src\third_party\llvm-build\Release+Asserts\bin;%GITHUB_WORKSPACE%\..\webrtc\src\third_party\ninja;%PATH%"
set "PATH=%GITHUB_WORKSPACE%\..\webrtc\src\third_party\llvm-build\Release+Asserts\bin;%GITHUB_WORKSPACE%\..\webrtc\src\third_party\ninja;%GITHUB_WORKSPACE%\depot_tools;%PATH%"
set
cmake -G Ninja -DCMAKE_C_COMPILER=clang-cl.exe -DCMAKE_CXX_COMPILER=clang-cl.exe -DCMAKE_BUILD_TYPE=${{ matrix.buildtype }} -DCMAKE_MAKE_PROGRAM=ninja.bat -DDETECT_OPENSSL=OFF .
ninja
Expand All @@ -62,7 +62,7 @@ jobs:
cpack
echo "artifactPath=$(ls *.tar.gz)" >> $GITHUB_ENV

- uses: actions/upload-artifact@v3
- uses: actions/upload-artifact@v4
with:
name: ${{ env.artifactPath }}
path: ${{ env.artifactPath }}
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/deploy-docker.yml
Original file line number Diff line number Diff line change
Expand Up @@ -46,14 +46,14 @@ jobs:
tags: ${{ steps.meta.outputs.tags }}

- name: Log in to Azure
uses: azure/login@v1
uses: azure/login@v2
with:
creds: ${{ secrets.AZURE_CREDENTIALS }}

- name: Build and deploy Container App
uses: azure/container-apps-deploy-action@v1
with:
imageToDeploy: ${{ steps.meta.outputs.tags }}
imageToDeploy: ${{ steps.meta.outputs.json != '' && fromJSON(steps.meta.outputs.json).tags[0] || '' }}
containerAppName: webrtcstreamer
resourceGroup: deploy
targetPort: 8000
2 changes: 1 addition & 1 deletion .vscode/launch.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/webrtc-streamer",
"args": ["-C", "config.json", "-a"],
"args": ["-C", "config.json", "-o"],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
Expand Down
36 changes: 22 additions & 14 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ project (webrtc-streamer)
set (WEBRTCROOT "${CMAKE_CURRENT_SOURCE_DIR}/../webrtc" CACHE STRING "WEBRTC root directory")
set (WEBRTCDESKTOPCAPTURE "ON" CACHE STRING "WEBRTC Desktop capture")
set (WEBRTCCHROMEBRANDED "ON" CACHE STRING "WEBRTC Chrome branded")
set (WEBRTCVERSION "b00c469cad3f8c926fcf81ded90b90b6e1e62b9c" CACHE STRING "WEBRTC version")
set (WEBRTCVERSION "4030180fc54091af5c79a7a3b42664b225c4bd02" CACHE STRING "WEBRTC version")

if(NOT CMAKE_BUILD_TYPE)
set (CMAKE_BUILD_TYPE "Release")
Expand Down Expand Up @@ -82,7 +82,7 @@ if (NOT EXISTS ${WEBRTCOBJS}/${CMAKE_STATIC_LIBRARY_PREFIX}webrtc${CMAKE_STATIC_
endif()


set (WEBRTCARGS rtc_include_tests=false\nrtc_enable_protobuf=false\nrtc_build_examples=false\nrtc_build_tools=false\ntreat_warnings_as_errors=false\nenable_js_protobuf=false\nuse_glib=false\nuse_lld=false\n)
set (WEBRTCARGS rtc_include_tests=false\nrtc_enable_protobuf=false\nrtc_build_examples=false\nrtc_build_tools=false\ntreat_warnings_as_errors=false\nenable_js_protobuf=false\nuse_glib=false\n)
set (WEBRTCARGS use_custom_libcxx=false\nlibyuv_use_sme=false\n${WEBRTCARGS})
# debug/release
if(CMAKE_BUILD_TYPE STREQUAL "Release")
Expand Down Expand Up @@ -112,17 +112,16 @@ if (NOT EXISTS ${WEBRTCOBJS}/${CMAKE_STATIC_LIBRARY_PREFIX}webrtc${CMAKE_STATIC_
file(COPY ${WEBRTCROOT}/src/third_party/ffmpeg/libavformat/demuxer_list.c DESTINATION ${WEBRTCROOT}/src/third_party/ffmpeg/chromium/config/Chrome/linux/arm/libavformat/)
file(COPY ${WEBRTCROOT}/src/third_party/ffmpeg/libavformat/muxer_list.c DESTINATION ${WEBRTCROOT}/src/third_party/ffmpeg/chromium/config/Chrome/linux/arm/libavformat/)
file(COPY ${WEBRTCROOT}/src/third_party/ffmpeg/libavformat/protocol_list.c DESTINATION ${WEBRTCROOT}/src/third_party/ffmpeg/chromium/config/Chrome/linux/arm/libavformat/)
endif()

#patch
file(READ ${WEBRTCROOT}/src/rtc_base/ssl_stream_adapter.h filecontent)
string(REPLACE "#include <vector>" "#include <vector>\n#include <optional>" filecontent "${filecontent}")
file(WRITE ${WEBRTCROOT}/src/rtc_base/ssl_stream_adapter.h "${filecontent}")
endif()

#patch
file(READ ${WEBRTCROOT}/src/media/base/media_channel.h filecontent)
string(REGEX REPLACE "ost << ToStringIfSet[^;]*;" "" filecontent "${filecontent}")
file(WRITE ${WEBRTCROOT}/src/media/base/media_channel.h "${filecontent}")

file(READ ${WEBRTCROOT}/src/call/rtp_config.cc filecontent)
string(REGEX REPLACE "stream_config.rtx.emplace\\(\\)" "stream_config.rtx.emplace(RtpStreamConfig::Rtx())" filecontent "${filecontent}")
file(WRITE ${WEBRTCROOT}/src/call/rtp_config.cc "${filecontent}")

# sound support
if (APPLE)
Expand Down Expand Up @@ -169,10 +168,13 @@ if (NOT EXISTS ${WEBRTCOBJS}/${CMAKE_STATIC_LIBRARY_PREFIX}webrtc${CMAKE_STATIC_
SET (SHELLCOMMAND cmd /c )
endif()
EXECUTE_PROCESS(WORKING_DIRECTORY ${WEBRTCROOT}/src/out/${CMAKE_BUILD_TYPE} COMMAND ${SHELLCOMMAND} gn gen .)
SET(NINJA_TARGET webrtc rtc_json builtin_video_decoder_factory builtin_video_encoder_factory p2p_server_utils task_queue default_task_queue_factory)
EXECUTE_PROCESS(WORKING_DIRECTORY ${WEBRTCROOT}/src/out/${CMAKE_BUILD_TYPE} COMMAND ${SHELLCOMMAND} ninja ${NINJA_TARGET})
endif()

SET(NINJA_TARGET webrtc rtc_json builtin_video_decoder_factory builtin_video_encoder_factory p2p_server_utils task_queue default_task_queue_factory)
EXECUTE_PROCESS(WORKING_DIRECTORY ${WEBRTCROOT}/src/out/${CMAKE_BUILD_TYPE} COMMAND ${SHELLCOMMAND} ninja ${NINJA_TARGET} RESULT_VARIABLE NINJA_RESULT)
if(NOT NINJA_RESULT EQUAL 0)
message(FATAL_ERROR "webrtc build failed with exit code ${NINJA_RESULT}")
endif()
endif()

# build version identifier
if(GIT_FOUND)
Expand Down Expand Up @@ -258,6 +260,9 @@ if (WIN32)
add_definitions(-DUSE_X11 -DHAVE_SOUND -D_WINSOCKAPI_)
target_link_libraries (${CMAKE_PROJECT_NAME} secur32 dmoguids wmcodecdspuuid strmiids msdmo winmm dxgi d3d11 iphlpapi dwmapi shcore)
elseif (APPLE)
# use lld to link
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fuse-ld=lld -B${WEBRTCROOT}/src/third_party/llvm-build/Release+Asserts/bin")

# live555
add_definitions(-DNEED_XLOCALE_H=1)
# webrtc
Expand All @@ -276,6 +281,9 @@ elseif (APPLE)
target_link_libraries (${CMAKE_PROJECT_NAME} ${CORE_FOUNDATION} ${APPLICATION_SERVICES} ${CORE_SERVICES}
${CORE_AUDIO} ${AUDIO_TOOLBOX} ${IO_SURFACE} ${APP_KIT})
else()
# use lld to link
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fuse-ld=lld -B${WEBRTCROOT}/src/third_party/llvm-build/Release+Asserts/bin")

# libv4l2cpp
add_definitions(-DHAVE_V4L2)
aux_source_directory(libv4l2cpp/src LIBSRC_FILES)
Expand Down Expand Up @@ -346,9 +354,9 @@ if (NOT APPLE)
endif()

#cpack
install (TARGETS ${CMAKE_PROJECT_NAME} RUNTIME DESTINATION ${CMAKE_PROJECT_NAME})
install (DIRECTORY html DESTINATION ${CMAKE_PROJECT_NAME})
install (FILES config.json DESTINATION ${CMAKE_PROJECT_NAME})
install (TARGETS ${CMAKE_PROJECT_NAME} RUNTIME DESTINATION bin)
install (DIRECTORY html DESTINATION share/${CMAKE_PROJECT_NAME})
install (FILES config.json DESTINATION share/${CMAKE_PROJECT_NAME})
SET(CPACK_GENERATOR "TGZ")
SET(CPACK_SYSTEM_NAME ${CMAKE_SYSTEM_NAME}-${CMAKE_SYSTEM_PROCESSOR}-${CMAKE_BUILD_TYPE})
SET(CPACK_PACKAGE_CONTACT "[email protected]")
Expand Down
11 changes: 6 additions & 5 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-ins
&& cd ../webrtc \
&& fetch --nohooks webrtc \
&& cd ../webrtc-streamer \
&& cmake -DCMAKE_INSTALL_PREFIX=/app . && make \
&& cmake . && make \
&& make install \
&& git clean -xfd \
&& find ../webrtc/src -type d -name .git -exec rm -rf {} \; || true \
Expand All @@ -32,16 +32,17 @@ USER $USERNAME
FROM ubuntu:24.04
LABEL [email protected]

WORKDIR /app/webrtc-streamer
WORKDIR /usr/local/share/webrtc-streamer

COPY --from=builder /app/ /app/
COPY --from=builder /usr/local/bin/webrtc-streamer /usr/local/bin/
COPY --from=builder /usr/local/share/webrtc-streamer/ /usr/local/share/webrtc-streamer/

RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends libssl-dev libasound2-dev libgtk-3-0 libxtst6 libsm6 libpulse0 librtmp1 avahi-utils \
&& useradd -m user -G video,audio \
&& apt-get clean && rm -rf /var/lib/apt/lists/ \
&& ./webrtc-streamer -V
&& webrtc-streamer -V

USER user

ENTRYPOINT [ "./webrtc-streamer" ]
ENTRYPOINT [ "webrtc-streamer" ]
CMD [ "-C", "config.json" ]
9 changes: 5 additions & 4 deletions Dockerfile.arm64
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-ins
&& cd ../webrtc \
&& fetch --nohooks webrtc \
&& cd ../webrtc-streamer \
&& cmake -DCMAKE_INSTALL_PREFIX=/app -DCMAKE_SYSTEM_PROCESSOR=arm64 -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_C_COMPILER=aarch64-linux-gnu-gcc -DCMAKE_CXX_COMPILER=aarch64-linux-gnu-g++ -DCMAKE_FIND_ROOT_PATH_MODE_PROGRAM=NEVER -DCMAKE_FIND_ROOT_PATH_MODE_INCLUDE=ONLY -DCMAKE_FIND_ROOT_PATH_MODE_LIBRARY=ONLY -DCMAKE_FIND_ROOT_PATH_MODE_PACKAGE=ONLY -DWEBRTCDESKTOPCAPTURE=OFF . && make \
&& cmake -DCMAKE_SYSTEM_PROCESSOR=arm64 -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_C_COMPILER=aarch64-linux-gnu-gcc -DCMAKE_CXX_COMPILER=aarch64-linux-gnu-g++ -DCMAKE_FIND_ROOT_PATH_MODE_PROGRAM=NEVER -DCMAKE_FIND_ROOT_PATH_MODE_INCLUDE=ONLY -DCMAKE_FIND_ROOT_PATH_MODE_LIBRARY=ONLY -DCMAKE_FIND_ROOT_PATH_MODE_PACKAGE=ONLY -DWEBRTCDESKTOPCAPTURE=OFF . && make \
&& make install \
&& rm -rf ../webrtc && rm -f *.a && rm -f src/*.o \
&& apt-get clean && rm -rf /var/lib/apt/lists/
Expand All @@ -23,9 +23,10 @@ RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-ins
FROM --platform=arm64 ubuntu:24.04
LABEL [email protected]

WORKDIR /app/webrtc-streamer
WORKDIR /usr/local/share/webrtc-streamer

COPY --from=builder /app/ /app/
COPY --from=builder /usr/local/bin/webrtc-streamer /usr/local/bin/
COPY --from=builder /usr/local/share/webrtc-streamer/ /usr/local/share/webrtc-streamer/

ENTRYPOINT [ "./webrtc-streamer" ]
ENTRYPOINT [ "webrtc-streamer" ]
CMD [ "-a", "-C", "config.json" ]
9 changes: 5 additions & 4 deletions Dockerfile.rpi
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-ins
&& cd ../webrtc \
&& fetch --nohooks webrtc \
&& cd ../webrtc-streamer \
&& cmake -DCMAKE_INSTALL_PREFIX=/app -DCMAKE_SYSTEM_PROCESSOR=${ARCH} -DCMAKE_LIBRARY_ARCHITECTURE=arm-linux-gnueabihf -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_C_COMPILER=arm-linux-gnueabihf-gcc -DCMAKE_CXX_COMPILER=arm-linux-gnueabihf-g++ -DCMAKE_FIND_ROOT_PATH_MODE_PROGRAM=NEVER -DCMAKE_FIND_ROOT_PATH_MODE_INCLUDE=ONLY -DCMAKE_FIND_ROOT_PATH_MODE_LIBRARY=ONLY -DCMAKE_FIND_ROOT_PATH_MODE_PACKAGE=ONLY -DWEBRTCDESKTOPCAPTURE=OFF . && make \
&& cmake -DCMAKE_SYSTEM_PROCESSOR=${ARCH} -DCMAKE_LIBRARY_ARCHITECTURE=arm-linux-gnueabihf -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_C_COMPILER=arm-linux-gnueabihf-gcc -DCMAKE_CXX_COMPILER=arm-linux-gnueabihf-g++ -DCMAKE_FIND_ROOT_PATH_MODE_PROGRAM=NEVER -DCMAKE_FIND_ROOT_PATH_MODE_INCLUDE=ONLY -DCMAKE_FIND_ROOT_PATH_MODE_LIBRARY=ONLY -DCMAKE_FIND_ROOT_PATH_MODE_PACKAGE=ONLY -DWEBRTCDESKTOPCAPTURE=OFF . && make \
&& make install \
&& rm -rf ../webrtc && rm -f *.a && rm -f src/*.o \
&& apt-get clean && rm -rf /var/lib/apt/lists/
Expand All @@ -30,9 +30,10 @@ RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-ins
FROM $IMAGE
LABEL [email protected]

WORKDIR /app/webrtc-streamer
WORKDIR /usr/local/share/webrtc-streamer

COPY --from=builder /app/ /app/
COPY --from=builder /usr/local/bin/webrtc-streamer /usr/local/bin/
COPY --from=builder /usr/local/share/webrtc-streamer/ /usr/local/share/webrtc-streamer/

ENTRYPOINT [ "./webrtc-streamer" ]
ENTRYPOINT [ "webrtc-streamer" ]
CMD [ "-a", "-C", "config.json" ]
6 changes: 3 additions & 3 deletions Dockerfile.windows
Original file line number Diff line number Diff line change
Expand Up @@ -47,12 +47,12 @@ RUN powershell -c "sleep -Seconds 60" && time /t
FROM mcr.microsoft.com/windows/server:ltsc2022
LABEL [email protected]

WORKDIR /app/webrtc-streamer
WORKDIR /app/share/webrtc-streamer

COPY --from=builder /app/ /app/

RUN dir /w && set
RUN webrtc-streamer.exe -V
RUN /app/bin/webrtc-streamer.exe -V

ENTRYPOINT [ "webrtc-streamer.exe" ]
ENTRYPOINT [ "/app/bin/webrtc-streamer.exe" ]
CMD [ "-a", "-C", "config.json" ]
8 changes: 7 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
[![Demo](https://img.shields.io/badge/azure-livedemo-green)](https://webrtcstreamer.agreeabletree-365b9a90.canadacentral.azurecontainerapps.io/)
[![Gitpod ready-to-code](https://img.shields.io/badge/Gitpod-ready--to--code-blue?logo=gitpod)](https://gitpod.io/#https://github.com/mpromonet/webrtc-streamer)


Experimentation to stream WebRTC media sources like capture devices, screen capture, mkv files and RMTP/RTSP sources using simple signaling mechanism (see [api](docs/api.md)). It is also compatible with [WHEP](https://datatracker.ietf.org/doc/html/draft-ietf-wish-whep-01) interface.

## Artefacts
Expand Down Expand Up @@ -136,7 +137,7 @@ The container entry point is the webrtc-streamer application, then you can:
- run the container giving config.json file:

```sh
docker run -p 8000:8000 -v $PWD/config.json:/app/config.json mpromonet/webrtc-streamer
docker run -p 8000:8000 -v $PWD/config.json:/usr/local/share/webrtc-streamer/config.json mpromonet/webrtc-streamer
```

## Using embedded STUN/TURN server behind a NAT
Expand Down Expand Up @@ -395,3 +396,8 @@ following architectures:
- arm64 crosscompiled
- Windows x64 build with clang
- MacOS


## Star History

[![Star History Chart](https://api.star-history.com/svg?repos=mpromonet/webrtc-streamer&type=Date)](https://star-history.com/#mpromonet/webrtc-streamer&Date)
21 changes: 4 additions & 17 deletions config.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,29 +3,16 @@

"PriceCenterPlaza" : { "video": "rtsp://132.239.12.145/axis-media/media.amp"},
"Waterford" : { "video": "rtsp://86.44.41.160/axis-media/media.amp", "position":"52.258330,-7.111940"},
"Bayonne" : { "video": "rtsp://193.142.128.20/axis-media/media.amp", "position":"43.483330,-1.483330"},
"Asahi" : { "video": "rtsp://211.132.61.124/axis-media/media.amp", "position":"35.717000,140.650000"},

"VyhladJazero": {"video": "rtsp://stream.strba.sk:1935/strba/VYHLAD_JAZERO.stream"},

"Zeeland": { "video": "rtsp://213.34.225.97/axis-media/media.amp", "position":"51.5,3.613890"},
"Vancouver": { "video": "rtsp://174.6.126.86/axis-media/media.amp", "position":"49.249660,-123.119340"},

"Bedford Hills": {"video": "rtsp://73.114.177.111/axis-media/media.amp"},
"Pocapaglia": {"video": "rtsp://176.65.94.105/axis-media/media.amp"},
"Norwich": {"video": "rtsp://37.157.51.30/axis-media/media.amp"},

"Great Falls": {"video": "rtsp://76.75.8.116/axis-media/media.amp", "position":"47.551039,-111.539400"},
"Western Cape": {"video":"rtsp://196.21.92.82/axis-media/media.amp", "position":"-33.925840,18.423220"},
"Mendoza": {"video":"rtsp://190.113.172.8/", "position":"-32.890840,-68.827170"},
"Nordland": {"video":"rtsp://77.110.228.219/axis-media/media.amp", "position":"67.280000,14.405010" },

"Allendale": {"video":"rtsp://71.83.5.156/axis-media/media.amp?videocodec=h265", "position":"42.972250,-85.953650" },


"Vaison-La-Romaine": {"video":"rtsp://176.139.87.16/axis-media/media.amp", "position":"44.238960,5.074610" },

"BigSky": {"video":"rtsp://76.75.8.120/axis-media/media.amp", "position":"45.284650,-111.368290"},
"Orlando": {"video":"rtsp://97.68.104.34/axis-media/media.amp", "position":"28.538340,-81.379240"}

"Orlando": {"video":"rtsp://97.68.104.34/axis-media/media.amp", "position":"28.538340,-81.379240"},

"H265": {"video":"file://h265.mkv"}
}
}
Binary file added h265.mkv
Binary file not shown.
2 changes: 1 addition & 1 deletion html
Submodule html updated 2 files
+8 −6 index.html
+79 −22 webrtcstreamer.js
7 changes: 5 additions & 2 deletions inc/EncodedVideoFrameBuffer.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,13 +17,15 @@
class EncodedVideoFrameBuffer : public webrtc::VideoFrameBuffer
{
public:
EncodedVideoFrameBuffer(int width, int height, const rtc::scoped_refptr<webrtc::EncodedImageBufferInterface> &encoded_data, webrtc::VideoFrameType frameType)
: m_width(width), m_height(height), m_encoded_data(encoded_data), m_frameType(frameType) {}
EncodedVideoFrameBuffer(int width, int height, const rtc::scoped_refptr<webrtc::EncodedImageBufferInterface> &encoded_data, webrtc::VideoFrameType frameType, const webrtc::SdpVideoFormat& format)
: m_width(width), m_height(height), m_encoded_data(encoded_data), m_frameType(frameType), m_format(format) {}
virtual Type type() const { return webrtc::VideoFrameBuffer::Type::kNative; }
virtual rtc::scoped_refptr<webrtc::I420BufferInterface> ToI420() { return nullptr; }
virtual int width() const { return m_width; }
virtual int height() const { return m_height; }

webrtc::SdpVideoFormat getFormat() const { return m_format; }

webrtc::EncodedImage getEncodedImage(uint32_t rtptime, int ntptime ) const {
webrtc::EncodedImage encoded_image;
encoded_image.SetEncodedData(webrtc::EncodedImageBuffer::Create(m_encoded_data->data(), m_encoded_data->size()));
Expand All @@ -38,4 +40,5 @@ class EncodedVideoFrameBuffer : public webrtc::VideoFrameBuffer
const int m_height;
rtc::scoped_refptr<webrtc::EncodedImageBufferInterface> m_encoded_data;
webrtc::VideoFrameType m_frameType;
webrtc::SdpVideoFormat m_format;
};
8 changes: 5 additions & 3 deletions inc/NullDecoder.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,12 @@
#pragma once

class NullDecoder : public webrtc::VideoDecoder {
public:
public:
NullDecoder(const webrtc::SdpVideoFormat& format) : m_format(format) {}
virtual ~NullDecoder() override {}

bool Configure(const webrtc::VideoDecoder::Settings& settings) override {
RTC_LOG(LS_ERROR) << "Configure format:" << m_format.name;
m_settings = settings;
return true;
}
Expand All @@ -37,7 +38,7 @@ class NullDecoder : public webrtc::VideoDecoder {
return WEBRTC_VIDEO_CODEC_UNINITIALIZED;
}
rtc::scoped_refptr<webrtc::EncodedImageBufferInterface> encodedData = input_image.GetEncodedData();
rtc::scoped_refptr<webrtc::VideoFrameBuffer> frameBuffer = rtc::make_ref_counted<EncodedVideoFrameBuffer>(m_settings.max_render_resolution().Width(), m_settings.max_render_resolution().Height(), encodedData, input_image.FrameType());
rtc::scoped_refptr<webrtc::VideoFrameBuffer> frameBuffer = rtc::make_ref_counted<EncodedVideoFrameBuffer>(m_settings.max_render_resolution().Width(), m_settings.max_render_resolution().Height(), encodedData, input_image.FrameType(), m_format);

webrtc::VideoFrame frame = webrtc::VideoFrame::Builder()
.set_video_frame_buffer(frameBuffer)
Expand All @@ -47,7 +48,7 @@ class NullDecoder : public webrtc::VideoDecoder {
.set_ntp_time_ms(input_image.NtpTimeMs())
.build();

RTC_LOG(LS_VERBOSE) << "Decode " << frame.id() << " " << input_image._frameType << " " << frameBuffer->width() << "x" << frameBuffer->height() << " " << frameBuffer->GetI420()->StrideY();
RTC_LOG(LS_VERBOSE) << "Decode " << frame.id() << " " << input_image._frameType << " " << frameBuffer->width() << "x" << frameBuffer->height();

m_decoded_image_callback->Decoded(frame);

Expand All @@ -56,6 +57,7 @@ class NullDecoder : public webrtc::VideoDecoder {

const char* ImplementationName() const override { return "NullDecoder"; }

private:
webrtc::DecodedImageCallback* m_decoded_image_callback;
webrtc::VideoDecoder::Settings m_settings;
webrtc::SdpVideoFormat m_format;
Expand Down
Loading