Mar*_*eca 5 html5 stream django-rest-framework axios vue-cli-3
我有一个Django 2.1后端,该后端具有一个视频流端点和一个Vue-Cli3作为我的前端。我后端的视频流端点是一个GET请求。为了使流式传输在我的客户端上工作,我需要做的就是添加:
<img :src="$store.state.domain + 'cameras/video/' + camera.properties.name + '/'" width="240" alt="Camera live Stream">
Run Code Online (Sandbox Code Playgroud)
这工作正常,但现在我只需要保护经过身份验证的用户的后端路由。为此,我只需要在请求标头中添加身份验证令牌。问题是,根据为<img />标签发出的请求设置自定义标头,img标签不接受标头参数。因此,现在我尝试使用axios库构建请求,然后将请求结果流式传输到我的HTML img标签。到目前为止,我的Vue方法代码:
loadStream(){
const vm = this
let accessToken = vm.$store.getters.getAccessToken
let streamURL = `${vm.$store.state.domain}/cameras/video/${vm.camera.properties.name}/`
axios.get(streamURL, {headers: {"Authorization": `Bearer ${accessToken}`},
responseType: 'stream',
adapter: httpAdapter}
).then( response =>{
console.log(`success:${response.data}`)
let imgTag = document.createElement('img')
imgTag.src = URL.createObjectURL(response)
imgTag.classList.add('video-modal', 'popup-video')
imgTag.alt = `Camera ${camera.properties.name} liveStream`
imgTag.setAttribute("crossorigin", '')
let streamDiv = document.getElementById('livestream-img')
streamDiv.appendChild(imgTag)
}).catch( error => {
console.log(`error:${response.data}`)
let imgTag = document.createElement('img')
imgTag.alt = `Camera ${camera.properties.name} liveStream`
let streamDiv = document.getElementById('livestream-img')
streamDiv.appendChild(imgTag)
})
}
Run Code Online (Sandbox Code Playgroud)
我得到的只是以下警告: 警告:提供的值“ stream”不是XMLHttpRequestResponseType类型的有效枚举值。
我的要求也永无止境。Promise永远不会命中.then()或.catch(),因为它正在流式传输。好像responseType不能正常工作。我想念什么吗?
这是我的django后端端点:
class CameraVideoStreamingView(APIView):
def get(self, request, name):
cam = Camera.objects.get(name=name)
return StreamingHttpResponse(cam.serve_web_stream(),
content_type="multipart/x-mixed-replace;boundary=frame")
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
437 次 |
最近记录: |