如果我指望我的write()系统调用写入例如100字节,我总是将该write()调用放在一个循环中,该循环检查返回的长度是否是我预期发送的长度,如果不是,它会缓冲缓冲区指针并减少写入量的长度.
所以我再次这样做了,但是现在有了StackOverflow,我可以问你们所有人是否知道我的写作时间会写出我要求的所有内容而不是给我一个部分写入?
附加评论:X-Istence的回复提醒我,我应该注意到文件描述符是阻塞的(即,不是非阻塞).我认为他建议阻塞文件描述符上的write()不会写入所有指定数据的唯一方法是write()被信号中断.这似乎至少对我有直观的意义......
为什么使用UIImagePickerController选择高视频和中等视频质量设置的视频会产生完全相同的视频属性,至少在iPhone4和iPad3等设备上?
细节:
我们正在使用UIImagePickerController让我们的应用程序用户从照片库中选择图像或视频,然后将它们传输到服务器.我们让用户选择我们直接映射到UIImagePickerControllerQualityTypeHigh,UIImagePickerControllerQualityTypeMedium和UIImagePickerControllerQualityTypeLow videoQuality常量的高,中或低视频质量.
当我们使用相机在我们的应用程序外拍摄的10秒左右的视频被选中并在3GS(iOS 5.0)上发送时,我们会看到每个质量设置的明显差异,例如:
当我们在iPhone4或iPad3上尝试相同时(我们碰巧有那些设备很方便;不确定它只发生在那些设备上)我们看到低设置产生等效的低分辨率结果,但高和中等设置给出我们相同的结果,像这样:
(请注意,中高结果是相同的.)
该设备的原始版本为12.8 MB,720x1280,编解码器:AAC H.264,比特率更高.
可以解释一下这里发生了什么吗?我希望能够向我们的客户解释它,甚至更好地指出Apple的文档中涉及到这一点.
在此先感谢任何帮助......
我们正在使用AVAssetReader和使用AVAssetWriter的视频编码中AVAssetWriter提到的样式- CRASHES基本上是从视频库/资产库中读取视频,然后以不同的比特率写入以减小其大小(用于最终的网络上传) .
让它为我们工作的诀窍是kCVPixelBufferPixelFormatTypeKey在outputSettingson中指定一个键和值AVAssetReaderTrackOutput,如下所示:
NSDictionary *outputSettings = [NSDictionary
dictionaryWithObject:[NSNumber numberWithInt:kCVPixelFormatType_32BGRA]
forKey:(id)kCVPixelBufferPixelFormatTypeKey];
readerTrackOutput =
[[AVAssetReaderTrackOutput alloc] initWithTrack:src_track
outputSettings:outputSettings];
Run Code Online (Sandbox Code Playgroud)
所以基本上我们使用kCVPixelFormatType_32BGRA了kCVPixelBufferPixelFormatTypeKey键的值.
但显然我们可以选择许多可能的像素格式类型.在iOS 6.0.1 iPhone设备上运行技术问答QA1501:核心视频 - 可用像素格式中记录的代码,以下是它显示的支持像素格式类型列表:
Core Video Supported Pixel Format Types:
Core Video Pixel Format Type: 32
Core Video Pixel Format Type: 24
Core Video Pixel Format Type: 16
Core Video Pixel Format Type (FourCC): L565
Core Video Pixel Format Type (FourCC): 2vuy …Run Code Online (Sandbox Code Playgroud) 在iOS 4.2上,当我使用UIImagePickerController让用户从照片库中选择一个图像时,这些是返回给我的字典键:
2011-03-02 13:15:59.518 xxx[15098:307] didFinishPickingMediaWithInfo:
info dictionary: {
UIImagePickerControllerMediaType = "public.image";
UIImagePickerControllerOriginalImage = "<UIImage: 0x3405d0>";
UIImagePickerControllerReferenceURL =
"assets-library://asset/asset.JPG?id=1000000050&ext=JPG";
}
Run Code Online (Sandbox Code Playgroud)
使用这些键中的一个或多个,如何获得包含图像元数据(例如曝光信息和GPS位置数据)的JPEG表示,以便我可以在某处上传并包含元数据(不会被剥离)?
我从Warren Burton看到的非常好的答案显示从iPhone中的ALAsset中检索到的URL显示图像?如何使用UIImagePickerControllerReferenceURL和ALAssetsLibrary assetForURL方法来获取ALAsset和ALAssetRepresentation.但是,我该怎样做才能获得包含所有元数据的JPEG?
或者是否有通过UIImage的机制?
这里的底线是我想获得包含在其中的元数据的JPEG ...
jpeg metadata uiimagepickercontroller uiimagejpegrepresentation
[抱歉我的英语不好]
问题很简单(但我在表达它并在谷歌中找到它时遇到麻烦)......
我应该(在所有类似的情况下,当我覆盖超级方法时,不仅仅是这个)使用:
- (void)viewDidLoad
{
/*
my code
*/
[super viewDidLoad];
}
Run Code Online (Sandbox Code Playgroud)
要么
- (void)viewDidLoad
{
[super viewDidLoad];
/*
my code
*/
}
Run Code Online (Sandbox Code Playgroud)
还是依赖?
我注意到Dropbox iOS应用程序允许您为上传的视频设置上传质量(设置>上传质量>视频质量>原始|高|中|低).我很好奇这样的应用程序如何以"原始"质量访问视频.我们的应用程序使用UIImagePickerController videoQuality属性,具有低,中和高设置(UIImagePickerControllerQualityTypeLow/Medium/High),但在使用这些时,选择器控制器显示"压缩视频",结果不是原始视频.
也许使用UIImagePickerController无法访问原始文件,我们必须切换到另一种方法?
我确实看到了相关的问题.当我选择一个视频时,不要压缩视频但是没有答案.
有关访问原始视频的任何建议将不胜感激.
我有一个在Linux上以root身份运行的程序,与tty交谈(实际上是一个实现为tty的LCD).值得的设备是/ dev/ttyUSB0.我想让我写入该设备的程序能够独占访问该设备,以免受到同时运行的其他程序实例的干扰.
我看到有一个名为TIOCEXCL的ioctl选项会阻止设备的额外打开,除非发出TIOCEXCL ioctl,否则对同一文件的多次open()调用将成功.这将阻止除root权限进程之外的其他打开. " 我对此进行了测试,它的工作方式与广告一样:如果非root用户尝试打开/ dev/ttyUSB0(一旦我更改了权限),那么打开失败,例如"设备忙",如果root用户尝试打开它, 有用.
理想情况下我想要的是这种独家访问tty以便为root用户工作的方法.所以我有多个root用户使用写入LCD的程序,但不知何故他们对LCD(tty)的访问将被序列化.显然,TIOCEXCL ioctl选项对我不起作用,因为它不会阻止root用户打开已经打开的tty设备.
我想这里有很多选择,但我会向所有人伸出援手,看看你是否还有其他想法或建议.
也许我错过了使用TIOCEXCL的一些东西......
也许还有其他方式通过open()或ioctl()或what-not获得独占访问权限.
如果有某种方法我可以检测到某个其他进程打开了设备,我可以等待并重试.我知道lsof,但我不愿意从这个程序中调用它只是为了学习这个.并且存在竞争条件.(也许我可以克服那个?:))
我可以实现锁定,就像显然用来获得对tty设备的独占访问.
更新1:
由于写入LCD设备的唯一程序是我的,我倾向于执行类似以下(伪代码)的操作来锁定代码:
f = open("/dev/ttyUSB0", O_RDWR)
flock(f, LOCK_EX)
// do any ioctl's, etc.
// do any write's
// sleep a tad to not flash messages too fast on LCD
nanosleep({0, 250000000}, NULL)
flock(f, LOCK_UN)
close(f)
Run Code Online (Sandbox Code Playgroud) ios ×4
linux ×2
unix ×2
c ×1
core-video ×1
jpeg ×1
metadata ×1
objective-c ×1
oop ×1
resolution ×1
tty ×1
videoquality ×1