我正在尝试用UIImagePickerController压缩用户摄像头拍摄的视频(不是现有的视频,而是一个即时的视频)上传到我的服务器并花费少量时间这样做,所以较小的尺寸是理想的而不是30-新品质相机45毫升.
这是在iOS 8中使用swift进行压缩的代码,它压缩得非常好,我从35 mb轻松到2.1 mb.
func convertVideo(inputUrl: NSURL, outputURL: NSURL)
{
//setup video writer
var videoAsset = AVURLAsset(URL: inputUrl, options: nil) as AVAsset
var videoTrack = videoAsset.tracksWithMediaType(AVMediaTypeVideo)[0] as AVAssetTrack
var videoSize = videoTrack.naturalSize
var videoWriterCompressionSettings = Dictionary(dictionaryLiteral:(AVVideoAverageBitRateKey,NSNumber(integer:960000)))
var videoWriterSettings = Dictionary(dictionaryLiteral:(AVVideoCodecKey,AVVideoCodecH264),
(AVVideoCompressionPropertiesKey,videoWriterCompressionSettings),
(AVVideoWidthKey,videoSize.width),
(AVVideoHeightKey,videoSize.height))
var videoWriterInput = AVAssetWriterInput(mediaType: AVMediaTypeVideo, outputSettings: videoWriterSettings)
videoWriterInput.expectsMediaDataInRealTime = true
videoWriterInput.transform = videoTrack.preferredTransform
var videoWriter = AVAssetWriter(URL: outputURL, fileType: AVFileTypeQuickTimeMovie, error: nil)
videoWriter.addInput(videoWriterInput)
var videoReaderSettings: [String:AnyObject] = [kCVPixelBufferPixelFormatTypeKey:kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange]
var videoReaderOutput = AVAssetReaderTrackOutput(track: videoTrack, outputSettings: videoReaderSettings)
var …Run Code Online (Sandbox Code Playgroud) 在 iOS 12 中,我有一个用于注册流程的新密码文本字段,我希望系统建议一个强密码。我还有一个基于委托方法启用和禁用的按钮,我做了一些更改等。
textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String)
这对于在用户点击 时启用它很有用Use Strong Password。但是我似乎没有收到用户可能点击时的委托回调,Choose My Own Password因此我的按钮启用/禁用逻辑永远没有机会执行,允许某人使用空白密码进行注册。
关于当用户点击时我可能不需要做什么来获得回调的任何想法Choose my own password?任何帮助是极大的赞赏。
好的,所以我正在构建一个使用该库进行底部导航的android应用,并且我正在使用基本Activity将其与Framelayout一起保存以管理我的片段以进行加载/替换等。
起作用的方法: 点击底部的条形图标可加载其对应的片段,并且效果很好。
我的问题: 如果我点击第一个选项卡,然后在第二个选项卡,然后在第一个选项卡再次从头开始,整个片段重新加载。
我不要这种行为。人对如何同时保留一个片段的状态什么好的建议ALSO使用底栏库。
我在以前的应用程序中使用pagerview实现了类似的功能(先前的应用程序未使用底部栏进行导航),但是我不确定如何使用具有ONE基本活动的寻呼机视图,该活动保留了Framelayout来替换片段,或者那甚至是最好的解决方案。
我喜欢到目前为止我拥有的解决方案,只是每次碎片替换前一个碎片时都会从头重新加载。如果任何人有任何帮助或建议可以帮助我,将不胜感激。
是否可以让多个 FILE * s 指向具有不同访问模式的同一个文件?例如
假设我有fopen("File1.bin","wb",fp1)并且我执行写操作并且没有使用 fclose 关闭文件我调用fopen("File1.bin","rb",fp2)并尝试对其使用写操作。这应该失败。但是当我使用不同的访问模式时,fp2 仍然会向它写入内容。为什么?
所以我有一个CloudBuild触发器来构建我的cloudbuild.yaml文件,一切都很好。我还使用gcloud构建器运行docker命令,将ENV变量传递给我的Dockerfile。例如:
steps:
- name: 'gcr.io/$PROJECT_ID/swift:4.2'
args: ['test']
id: 'Running unit tests'
- name: 'gcr.io/cloud-builders/docker'
args: ['build','--build-arg', 'PROJECT=$PROJECT_ID','-t', 'us.gcr.io/$PROJECT_ID/$BRANCH_NAME:$SHORT_SHA', '.']
id: 'Building docker image'
- name: 'gcr.io/cloud-builders/docker'
args: ["push", "us.gcr.io/$PROJECT_ID/$BRANCH_NAME:$SHORT_SHA"]
id: 'Pushing built image to registry'
- name: 'gcr.io/cloud-builders/gcloud'
args: ['app', 'deploy']
id: 'Deploying to AppEngine'
timeout: 1800s # 30 minute timeout
Run Code Online (Sandbox Code Playgroud)
如您所见,我正在使用所有GCP资源默认具有的ENV变量($PROJECT_ID例如)。在docker命令中,我将其作为参数传递,因此可以ARG在dockerfile中使用该命令:
ARG PROJECT
FROM gcr.io/${PROJECT}/swift:4.2 as builder
WORKDIR /App
#Other commands....
Run Code Online (Sandbox Code Playgroud)
现在,所有这些都可以正常工作,并且我能够构建自己的映像等。现在,我想在最后一步中将其部署到App Engine。唯一的问题是,我使用相同的Dockerfile来使用swift:4.2仅位于我的GoogleContainerRegistry中的基本映像,因此我需要$PROJECT_ID我的项目将其拉出。
我的问题是:有什么方法可以让AppEngine构建环境在部署时将参数传递给构建我的映像的docker构建?我有一个app.yaml文件,并且我知道有一个env_variables: …
google-app-engine app.yaml docker google-cloud-platform google-cloud-build
ios ×2
swift ×2
android ×1
app.yaml ×1
c++ ×1
compression ×1
corrupt ×1
docker ×1
file ×1
ios12 ×1
mode ×1
navigation ×1
uitextfield ×1
video ×1