python - 当我尝试使用 ffmpeg 和烧瓶寻找流时出错
问题描述
我想从谷歌驱动器文件中获取可搜索的流,但是当调用 127.0.0.1:500/ 时,它可以工作并返回视频流,但它没有显示视频的持续时间,也不允许我前进或倒退它
我还使用 html 播放器进行了测试,它给了我一个内容长度错误,似乎 8 秒后它开始上传文件的持续时间长达 10 秒(文件的总持续时间为 10 秒)
import threading
from flask import Flask, request
from flask.helpers import stream_with_context
import requests
import subprocess
from requests import Response
from flask import request, make_response, Response, stream_with_context, send_file
app = Flask(__name__)
@app.route('/<id>')
def index(id):
range = request.headers.get('Range')
token = "ya29.a0ARrdaM8vW_pKmGhIRleJiZ9fuoprk2-zS0bgJPaslD3V4idJ6wK52_iwJE8MOYnj7kCOWl5m2oHlEWc3LEWcPt5-b4nemoC7SKy7l-4QO1DviJnPBfVeHruAU27I_UE3gMPRV4H-Tk1ZLrNp56UfxyR-ObAx"
headers = {
"Authorization":"Bearer "+token
}
if (range != None):
headers = {
"Authorization": "Bearer " + token,
"Range":range
}
url = "https://www.googleapis.com/drive/v3/files/"+id+"?alt=media"
r = requests.get(url, headers=headers, stream=True)
def getVideoStreaming():
for chunck in r.iter_content(1024):
if chunck:
process.stdin.write(chunck)
process.stdin.close()
thread = threading.Thread(target=getVideoStreaming)
command = ("ffmpeg","-i", "-","-y","-vcodec","copy","-movflags", "frag_keyframe+empty_moov","-f","mp4","pipe:1")
process = subprocess.Popen(command,shell=True,stdout = subprocess.PIPE,stdin=subprocess.PIPE)
thread.start()
def readingFfmpeg():
for data in iter(process.stdout.readline, b''):
if not data:
break
yield data
response = Response(stream_with_context(readingFfmpeg()),mimetype=r.headers.get('Content-Type'))
response.headers.set('Content-Range',r.headers.get('Content-Range'))
response.headers.set('Cache-Control', r.headers.get('Cache-Control'))
response.headers.set('Content-Length', r.headers.get('Content-Length'))
if(range != None):
return response,200
else:
return response,206
解决方案
推荐阅读
- ruby - Ruby Bundler - 同一个 gemfile 中的多个 Ruby 版本
- reactjs - React,Jest - 不能一起运行测试
- javascript - 谷歌图表,通过添加 $.each 为每个条形添加不同的颜色
- python - 如何获取熊猫数据框中列的唯一长度?
- sql - 甲骨文将两条记录合并到一条记录中,尽管有联合
- javascript - 如何使用 where 子句查看 id 是否存在于 postgres 数组类型列中
- python-3.x - 使用生成器进行多处理以暴力破解 b64 编码数据中丢失的字符 - 可能/如何?
- c# - 如何更改列表单元格的第三个字符
- azure - Azure DevOps 首次 Web 应用部署总是出错
- java - vscode.java.test.search.items 没有 delegateCommandHandler