RandomThoughts

RandomThoughts

Mac

Contents:
  1. VSCode関連
  2. 雑多なリンク
  3. PDFリーダー
    1. PDF Reader Pro Lite
    2. PDF Reader - Simple Viewer
    3. PDF Reader X
  4. スクリーンキャストをアニメgifにするアプリ
  5. MacとWindowsのファイル共有
  6. LAN内のIPアドレスを知る方法
  7. WindowsへのRemote Desktopのキーボードのカスタマイズ
  8. launchctl
  9. UIKit入門
    1. 久しぶりに触った時に気をつける事
  10. 途中から見えないAVIの対処
  11. Instrumentsのworking directoryの設定
  12. Xcodeのバージョンセレクタ
  13. iOSのビデオ配信周り
    1. Fragmented MPEG-4とAVAssetWriter
    2. AV Foundation
    3. Audioのキャプチャ
  14. エンコードとデコードのsample bufferの直接アクセス
    1. 扱う4つのユースケース
    2. 良く出てくる登場人物
    3. H.264のストリームのデコード(1つ目のケース)
    4. VTDecompressSessionによるデコードした画像へのアクセス
    5. VTCompressionSessionでネットワークに圧縮フレームを直接送る
    6. Elementary Streamへの変換
  15. メモ

VSCode関連

VSCodeの環境設定などをちょこちょこブログに書いているのでここにリンクをまとめておく。

雑多なリンク

PDFリーダー

MacのPDFリーダー。デフォルトは目次のexpand時のツリービューのスクロールがおかしいので、 長いドキュメント(主にC++本)を読むのに辛いので他を物色。

編集とかの機能のせいで目的のメニューを探しづらいとかが嫌なので、出来たら注釈とかも無しでただ読むのに最適化したのが欲しい。

PDF Reader Pro Lite

目次の項目の上をホバーさせるとpreviewが出てめちゃ邪魔なのが辛い。他はまぁ我慢出来なくも無いのだが。 あと課金の促しが結構邪魔。

PDF Reader - Simple Viewer

目次のビューが無い。

PDF Reader X

今の所良さそうか。

スクリーンキャストをアニメgifにするアプリ

gifでAppStoreで検索して一番上に出てきたPicGIF Liteはなんか凄い速いのしか作れなくて使い方が分からなかった。 その次にダウンロードしたGifskiは使い方も分かりやすくやりたい事が出来たのでこれで行く事にする。

MacとWindowsのファイル共有

仕事効率化!MacとWindows間のファイル共有テクニック 3 選

Sambaが最初から入っているっぽいな。

>いまいちだったのでMac側でsshdを有効にしてscpした。

システム環境設定>共有>リモートログイン

でチェックは全部はずした状態でリモートログインだけチェックしてscpする。

LAN内のIPアドレスを知る方法

arp -aが簡単だが十分。

WindowsへのRemote Desktopのキーボードのカスタマイズ

keyboard - How would I remap Mac CMD to CTRL keys in Remote Desktop Connection for Mac application? - Super User

Contents/Resources/Keyboardの下にxmlがある。

ClipboardActionTransformations.xml に追加してしまえば良いか? Command+Wをクローズにするのは出来たが、Command+TabをCtrl+TabにするのとCommand+QをWindows+Qにする方法がわからないな。ぐぬぬ。

launchctl

定期実行はMacではlaunchdとlaunchctlというのを使う。

実行時にはpathなどが通ってないのでlaunchctl setenvというのを使う。

launchctl setenv PATH /usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin
launchctl setenv NODE_PATH /usr/local/lib/node_modules

UIKit入門

iOS開発に入門する - なーんだ、ただの水たまりじゃないか にも書いた内容だが、 最近はGetting Startedとか無くなっちゃっててSwiftUIに飛ばされるっぽいので(マジか…)

久しぶりに触った時に気をつける事

  • Constraintsは子供を一通り入れ終わったあとに作業すべし
  • 右側のペインのタブ切り替えで切り替えて目的のものを探す
  • イベント関連は左側にツリー出して左クリックから変な丸を上にドラッグアンドドロップして相手を指定
  • ポトペタ対象はCmd+Shift+Lで(メニューのViewにShow Libraryでも出る)
  • Viewを作りたいのにインターフェースビルダーでiPhoneの絵みたいなのになる>右側のタブでSimulated MetrixをFreeformにする

途中から見えないAVIの対処

Free WMV AVI Converterを使っている。

Instrumentsのworking directoryの設定

毎回わからなくなるのでメモする。

XCode の Instrumentsのworking directoryの設定は、 上のタスクバーの中のexeっぽいアイコンからEdit XXXを選んで、一番下のtext areaがそれ。

Xcodeのバージョンセレクタ

XcodesOrg/xcodes: The best command-line tool to install and switch between multiple versions of Xcode.

iOSのビデオ配信周り

YouTubeAPITwitchで配信するようなケースで、iOS側はどうなっているかを調べるメモ。

HTTP Live Streaming - Apple Developer Documentation あたりから見るのか?

Fragmented MPEG-4とAVAssetWriter

Author fragmented MPEG-4 content with AVAssetWriter - WWDC20 - Videos - Apple Developer

この一つ手前のエンコーダーのあたりを知りたいのだが、とりあえずの取っ掛かりとして。 このサンプルコードからたどって見つけた。 Writing Fragmented MPEG-4 Files for HTTP Live Streaming - Apple Developer Documentation

この動画はやりたい事とは違いそうだが、情報量が多いのでなかなか良い。

Working with Media in AV Foundation (WWDC11)がみたい動画っぽいが見つからないな。

ただAV Foundation周りを調べると良さそうか。

AV Foundation

AVFoundation Overview - Apple Developer

Apple iOS Development: Understanding AV Foundation - YouTube

Playbackの解説と、Editingの解説が詳しい。Editingは役に立ちそう。AVComposition、AVAudioMixなどの解説や時間などがどう表されるかなどの解説。

最後に言及されてたサンプルコード

  • RosyWriter
  • AVReaderWriter for OSX

Audioのキャプチャ

オーディオというよりはステレオの話だが、サンプルコードは参考になりそう。

Capturing stereo audio from built-in microphones - Apple Developer Documentation

WWDCのこの動画が同じ内容か? Record stereo audio with AVAudioSession - WWDC20 - Videos - Apple Developer

なんかAVAudioRecoderはファイルに書く奴っぽいので、サンプルバッファが取れるのは無いのか? とググっていたらその辺の比較をしているブログを見つけた。 Recording Audio on iOS with Examples - Dolby.io

エンコードとデコードのsample bufferの直接アクセス

AVAssetWriterのdelegateの返すsegmentedDataがなんなのか全然分からなくて調べていた所見つけた動画。とても良いのでサブセクションを作る。 AV Foundationでは無くその下のVideo Toolboxを使うらしい。

Direct Access to Video Encoding and Decoding - WWDC14 - Videos - Apple Developer

参照されてる動画で気になったの

  • WWDC 2013 Moving to AVKit and AVFoundation

扱う4つのユースケース

ユースケースとして以下を挙げている

  1. Displaying an H.264 stream in a layer in your application
  2. Decoding an H.264 stream and accessing the decoded buffers
  3. Compressing a sequence of images into a movie file (27:50あたりから)
  4. Compressing a sequence of images into an H.264 stream for the network

良く出てくる登場人物

6分あたり。

  • CVPixelBuffer … 非圧縮の画像バッファ
  • CVPixelBufferPool … CVPixelBufferのバッファプール
  • pixelBufferAttributes … 幅、高さ、32RGBAなど
  • CMTime
  • CMVideoFormatDescription … width/height, フォーマットタイプとしてkCMPixelFormat_32RGBA、kCMVideoCodecType_H264など
  • CMBlockBuffer … 圧縮されたビデオフレームのデータなど
  • CMSampleBuffer … 圧縮されたビデオフレームと非圧縮のビデオフレームの二種類がある。以下を含む。
    • CMTime … プレゼンテーションタイム
    • CMVideoFormatDescription
    • 圧縮されたビデオの場合 … CMBlockBuffer
    • 非圧縮されたフレームの場合 … CVPixelBuffer
  • CMClock … mach_absolute_timeなどの勝手に進むなにかのラッパ
  • CMTimebase … CMClockを元に原点を決めたりとかいろいろ操作した時間

この辺は良く出てくるのでありがたい。

H.264のストリームのデコード(1つ目のケース)

10:00あたりから。15:00あたりからネットワークからCMSampleBufferへのコンバートの話が出てくる。

NetworkからくるH.264ストリームはElementary Streamと呼ばれる形式で、それとファイルに保存されるMPEG-4をベースとしたCMSampleBufferの間には変換が必要となる。

NAL Unitからmp4のCMVideoFormatDescriptionを作るのはCMVideoFormatDescriptorCreateFromH264ParameterSets。

CMSampleBufferを作るのに必要なのは以下の3つ。

  • CMTime
  • CMVideoFormatDescription
  • NAL Unit (ヘッダを長さに置き換える必要あり)

この3つを、CMSampleBufferCreateに食わせる。

VTDecompressSessionによるデコードした画像へのアクセス

20:00あたりから、ネットワークのストリームをデコードしてCVPixelBufferにアクセスする例に入る。 これにはVTDecompressSessionを使う。 この中にVideoDecoderが入っているらしい。

VTCompressionSessionでネットワークに圧縮フレームを直接送る

29:00あたりからCVPixelBufferを圧縮してネットワークに送る例が始まる。

VTCompressionSessionEncodeFrameでpixelBufferを送るっぽい。

最後に待つのはVTCompressionSessionCompleteFramesらしい。

Elementary Streamへの変換

34:00あたりからElementary Streamへの変換の話がある。 SPSとPPSを最初に送る必要があるが、これはCMVideoFormatDescriptionGetH264ParameterSetAtIndexというそのものずばりの関数がある。

次にNAL Unitの変換。I Frameなどは先頭に4バイトのlengthが入っているので、これを00 00 01の3 byteの開始コードに変換する必要がある。

メモ

使うか分からないメモを置いておく