Skip to content

Commit f5a880a

Browse files
authored
feat: adds UV4L-MJPEG camera support (#1734)
Signed-off-by: Pedro Lamas <pedrolamas@gmail.com>
1 parent 978ef60 commit f5a880a

4 files changed

Lines changed: 12 additions & 4 deletions

File tree

src/components/settings/cameras/CameraConfigDialog.vue

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@
7979
:items="[
8080
{ text: $t('app.setting.camera_type_options.mjpegadaptive'), value: 'mjpegstreamer-adaptive' },
8181
{ text: $t('app.setting.camera_type_options.mjpegstream'), value: 'mjpegstreamer' },
82+
{ text: $t('app.setting.camera_type_options.uv4l_mjpeg_stream'), value: 'uv4l-mjpeg' },
8283
{ text: $t('app.setting.camera_type_options.hlsstream'), value: 'hlsstream' },
8384
{ text: $t('app.setting.camera_type_options.webrtc_camera_streamer'), value: 'webrtc-camerastreamer' },
8485
{ text: $t('app.setting.camera_type_options.webrtc_go2rtc'), value: 'webrtc-go2rtc' },

src/components/widgets/camera/CameraItem.vue

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@
112112

113113
<script lang="ts">
114114
import { Component, Vue, Prop, Watch, Ref } from 'vue-property-decorator'
115-
import type { WebcamConfig } from '@/store/webcams/types'
115+
import type { WebcamConfig, WebcamService } from '@/store/webcams/types'
116116
import type { CameraFullscreenAction } from '@/store/config/types'
117117
import { CameraComponents } from '@/dynamicImports'
118118
import CameraMixin from '@/mixins/camera'
@@ -157,8 +157,14 @@ export default class CameraItem extends Vue {
157157
}
158158
159159
get cameraComponent () {
160-
if (this.camera.service) {
161-
const componentName = `${startCase(this.camera.service).replace(/ /g, '')}Camera`
160+
const cameraService: Exclude<WebcamService, 'uv4l-mjpeg'> | undefined = (
161+
this.camera.service === 'uv4l-mjpeg'
162+
? 'mjpegstreamer'
163+
: this.camera.service
164+
)
165+
166+
if (cameraService) {
167+
const componentName = `${startCase(cameraService).replace(/ /g, '')}Camera`
162168
163169
if (componentName in CameraComponents) {
164170
return CameraComponents[componentName]

src/locales/en.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -578,6 +578,7 @@ app:
578578
webrtc_camera_streamer: WebRTC (camera-streamer)
579579
video: IP Camera
580580
iframe: HTTP page
581+
uv4l_mjpeg_stream: UV4L-MJPEG Stream
581582
webrtc_go2rtc: WebRTC (go2rtc)
582583
webrtc_mediamtx: WebRTC (MediaMTX)
583584
camera_rotate_options:

src/store/webcams/types.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ export interface WebcamConfig extends NewWebcamConfig {
2525
source: WebcamSource;
2626
}
2727

28-
export type WebcamService = 'mjpegstreamer' | 'mjpegstreamer-adaptive' | 'ipstream' | 'iframe' | 'hlsstream' | 'webrtc-camerastreamer' | 'webrtc-go2rtc' | 'webrtc-mediamtx' | 'device'
28+
export type WebcamService = 'mjpegstreamer' | 'mjpegstreamer-adaptive' | 'ipstream' | 'iframe' | 'hlsstream' | 'webrtc-camerastreamer' | 'webrtc-go2rtc' | 'webrtc-mediamtx' | 'uv4l-mjpeg' | 'device'
2929

3030
export type WebcamRotation = 0 | 90 | 180 | 270
3131

0 commit comments

Comments
 (0)