PSLブログ

ヨシナシゴトヲツヅリマス

audio/3gppなファイルをsoftbank携帯で保存不可にできない

長いタイトルを付けてしまったが、つまりはそういうことである。ここはできなかったことばかりをつづるコーナーになってしまいそうだが、現在はまっているのである。

無料試聴サイトを作る依頼があって、3キャリア対応しなければならないのだが、docomoauは規格がちゃんとしていて、制限をかけるのはとても簡単なのだ。なので速攻でクリア。問題はsoftbank。まったく、どうしたものか。

  • Content-type: audio/3gppを出力すると、レスポンスが不正です(WJ46098E)のエラー
  • Content-type: video/3gppを出力すると、DLはできるが、再生ができない。保存しても非サポートファイルと判定されて、再生できない。

いろいろみて回って、softbankの技術資料もあたって、x-jphone-copyright: no-storeまたはCache-Control: no-storeを出力すれば、DLと再生のみができて、保存ができないようにできるはずなのだが、もう試行錯誤するのに疲れてしまった。

昨日、foward lockという方式があるというのを見つけて、先ほどやってみた。

#!/usr/bin/perl
use strict;
{

 my $id = "111111";
 open(my $fh, "<", "./3gp/softbank/$id.3gp")
 or die "3gpファイルが開けませんでした。: $!";
 my $stream = join("", <$fh>);
 my $fsize = length($stream);
 close($fh);

 $stream = "--boundary-1\r\n"
 . "Content-Type: audio/3gpp\r\n"
 . qq|Cache-Control: no-store\r\n|
 . qq|x-jphone-copyright: "no-store, no-transfer, no-peripheral"\r\n|
 . "Content-Transfer-Encoding: binary\r\n"
 . "\r\n"
 . $stream
 . "\r\n"
 . "--boundary-1--\r\n";
 print "Content-Type: application/vnd.oma.drm.message; boundary=boundary-1\r\n";
 print "Content-Length: ", length($stream), "\r\n";
 print "\r\n";
 print $stream;
 exit;

}

というようなものである。これなら、audio/3gppを指定してもWJ46098Eは出ず、しかも再生できた。もう、再生できただけでうれしいというレベルになってしまった。しかし、この方法では、不可なのは転送のみで、ダウンロードができてしまう。

勝手サイトで実際にダウンロードができないサイトがあるので、なにか方法があるのだと思うが、携帯はソースが見えないし、そのサイトはPCからの接続ができないので、どんなヘッダを吐いているかわからない。それさえ見れば一発なのに、惜しい。